Projet

Général

Profil

Paste
Télécharger (3,32 ko) Statistiques
| Branche: | Révision:

root / bin / d7-sync-site.sh @ d3e12e0b

1
#!/usr/bin/env bash
2

    
3
usage() {
4
    help="This script is intended to ease the synchronisation between any site hosted by assos.
5
Typically, this script is usefull when you have (or want to have) a test site based on
6
a already working site. It relies on bash, drush and drush aliases.
7

    
8
Before synching the site, the destination site's database is backuped. If the
9
destination site does not exist, it is created. If prod is set, the site is not in
10
maintenance mode.
11

    
12
usage: d7-sync.sh -s SOURCE_SITENAME -d DEST_SITENAME [-p]"
13
    echo -e "${help}"
14
}
15

    
16
source_site_name=''
17
dest_site_name=''
18
prod=false
19
while getopts "hs:d:p" opt; do
20
    case "${opt}" in
21
	s)
22
	    source_site_name="${OPTARG}";;
23
	d)
24
	    dest_site_name="${OPTARG}";;
25
	p)
26
	    prod=true;;
27
	h)
28
	    usage; exit 0;;
29
	:)
30
	    echo "Option -$OPTARG requires an argument." >&2
31
	    usage >&2; exit 1;;
32
	\?)
33
	    usage >&2; exit 1;;
34
    esac
35
done
36
shift $((OPTIND-1))
37

    
38
if [ -z "${source_site_name}" ] || [ -z "${dest_site_name}" ]; then
39
    echo "At least a required parameter is missing." >&2
40
    usage >&2
41
    exit 1
42
fi
43

    
44

    
45
. /home/assos/bin/scripts-config.sh
46
. /home/assos/bin/scripts-utils.sh
47

    
48
check_arguments "$#" 2 "${help}"
49

    
50

    
51
# Create site if necessary
52
if ! site_exists "${dest_site_name}" > /dev/null ; then
53
    echo "${dest_site_name} does not exit. We will create it"
54
    d7-create-site.sh "${dest_site_name}" --no-init-database
55
    # if the site is new, there is no database
56
    new_site=1
57
fi
58

    
59

    
60
# Backup the database of SOURCE_SITE
61
current_date=$(date "+%Y-%m-%d-%Hh%Mm%Ss")
62
if [ "${source_site_name}" = "default" ] ; then
63
    dir="${dest_site_name}"
64
else
65
    dir="assos.centrale-marseille.fr.${dest_site_name}"
66
fi
67
if [ -z "${new_site}" ] ; then
68
    drush -y "@${source_site_name}" sql-dump --result-file="${d7_dir_individual_manual_backup}/${dir}/${current_date}.${dir}.sql" --gzip
69
fi
70

    
71

    
72
# Sync files
73
drush -y rsync --delete --exclude="*.php" "@${1}:%site" "@${2}:%site"
74

    
75

    
76
# Sync databases
77
## Save file system
78
if [ -z "${new_site}" ] ; then
79
    private_path=$(drush "@${dest_site_name}" vget --format=string file_private_path 2> /dev/null)
80
    public_path=$(drush "@${dest_site_name}" vget --format=string file_public_path 2> /dev/null)
81
    temp_path=$(drush "@${dest_site_name}" vget --format=string file_temporary_path 2> /dev/null)
82
fi
83

    
84
## Sync
85
current_date=$(date "+%Y-%m-%d-%Hh%Mm%Ss")
86
sql_file="${dir_tmp}/${current_date}.${source_site_name}.sql"
87
drush -y "@${source_site_name}" sql-dump --result-file="${sql_file}"
88
sed -i -e "s#https?://assos.centrale-marseille.fr/${source_site_name}#https://assos.centrale-marseille.fr/${dest_site_name}#g" "${sql_file}"
89
sed -i -e "s#/${source_site_name}/sites/assos.centrale-marseille.fr.${source_site_name}#/${dest_site_name}/sites/assos.centrale-marseille.fr.${dest_site_name}#g" "${sql_file}"
90
drush "@${dest_site_name}" sql-drop
91
drush "@${dest_site_name}" sql-cli < "${sql_file}"
92
rm "${sql_file}"
93

    
94
## Restore file system
95
if [ -n "${private_path}" ] ; then
96
    drush -y "@${dest_site_name}" vset file_private_path "${private_path}"
97
fi
98
if [ -n "${public_path}" ] ; then
99
    drush -y "@${dest_site_name}" vset file_public_path "${public_path}"
100
fi
101
if [ -n "${temp_path}" ] ; then
102
    drush -y "@${dest_site_name}" vset file_temporary_path "${temp_path}"
103
fi
104

    
105
if "${prod}"; then
106
    drush -y "@${dest_site_name}" vset maintenance_mode 0
107
else
108
    drush -y "@${dest_site_name}" vset maintenance_mode 1
109
fi