Projet

Général

Profil

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

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

1 71d02f8c Julien Enselme
#!/usr/bin/env bash
2
3 15ed27d8 Julien Enselme
usage() {
4
    help=<<EOF
5 71d02f8c Julien Enselme
This script is intended to ease the synchronisation between any site hosted by assos.
6
Typically, this script is usefull when you have (or want to have) a test site based on
7
a already working site. It relies on bash, drush and drush aliases.
8
9 f4bff92c Julien Enselme
Before synching the site, the destination site's database is backuped. If the
10 15ed27d8 Julien Enselme
destination site does not exist, it is created. If prod is set, the site is not in
11
maintenance mode.
12 71d02f8c Julien Enselme
13 15ed27d8 Julien Enselme
usage: d7-sync.sh -s SOURCE_SITENAME -d DEST_SITENAME [-p]
14 71d02f8c Julien Enselme
EOF
15 15ed27d8 Julien Enselme
    echo -e "${help}"
16
}
17
18
source_site_name=''
19
dest_site_name=''
20
prod=false
21
while getopts "hs:d:p" opt; do
22
    case "${opt}" in
23
	s)
24
	    source_site_name="${OPTARG}";;
25
	d)
26
	    dest_site_name="${OPTARG}";;
27
	p)
28
	    prod=true;;
29
	h)
30
	    usage; exit 0;;
31
	:)
32
	    echo "Option -$OPTARG requires an argument." >&2
33
	    usage >&2; exit 1;;
34
	\?)
35
	    usage >&2; exit 1;;
36
    esac
37
done
38
shift $((OPTIND-1))
39
40
if [ -z "${source_site_name}" ] || [ -z "${dest_site_name}" ]; then
41
    echo "At least a required parameter is missing." >&2
42
    usage >&2
43
    exit 1
44
fi
45
46 71d02f8c Julien Enselme
47 06e9d071 Assos Assos
. /home/assos/bin/scripts-config.sh
48
. /home/assos/bin/scripts-utils.sh
49 71d02f8c Julien Enselme
50 3e9236bd Julien Enselme
check_arguments "$#" 2 "${help}"
51 c5ae85b0 Julien Enselme
52 42f1f46f Julien Enselme
53 71d02f8c Julien Enselme
# Create site if necessary
54 15ed27d8 Julien Enselme
if ! site_exists "${dest_site_name}" > /dev/null ; then
55
    echo "${dest_site_name} does not exit. We will create it"
56
    d7-create-site.sh "${dest_site_name}" --no-init-database
57 c9d0efbc Julien Enselme
    # if the site is new, there is no database
58
    new_site=1
59 71d02f8c Julien Enselme
fi
60
61 42f1f46f Julien Enselme
62 71d02f8c Julien Enselme
# Backup the database of SOURCE_SITE
63 8550e097 Julien Enselme
current_date=$(date "+%Y-%m-%d-%Hh%Mm%Ss")
64 15ed27d8 Julien Enselme
if [ "${source_site_name}" = "default" ] ; then
65
    dir="${dest_site_name}"
66 71d02f8c Julien Enselme
else
67 15ed27d8 Julien Enselme
    dir="assos.centrale-marseille.fr.${dest_site_name}"
68 c9d0efbc Julien Enselme
fi
69 3e9236bd Julien Enselme
if [ -z "${new_site}" ] ; then
70 15ed27d8 Julien Enselme
    drush -y "@${source_site_name}" sql-dump --result-file="${d7_dir_individual_manual_backup}/${dir}/${current_date}.${dir}.sql" --gzip
71 71d02f8c Julien Enselme
fi
72
73 42f1f46f Julien Enselme
74 71d02f8c Julien Enselme
# Sync files
75 3e9236bd Julien Enselme
drush -y rsync --delete --exclude="*.php" "@${1}:%site" "@${2}:%site"
76 71d02f8c Julien Enselme
77 42f1f46f Julien Enselme
78 71d02f8c Julien Enselme
# Sync databases
79
## Save file system
80 3e9236bd Julien Enselme
if [ -z "${new_site}" ] ; then
81 15ed27d8 Julien Enselme
    private_path=$(drush "@${dest_site_name}" vget --format=string file_private_path 2> /dev/null)
82
    public_path=$(drush "@${dest_site_name}" vget --format=string file_public_path 2> /dev/null)
83
    temp_path=$(drush "@${dest_site_name}" vget --format=string file_temporary_path 2> /dev/null)
84 c9d0efbc Julien Enselme
fi
85 42f1f46f Julien Enselme
86 71d02f8c Julien Enselme
## Sync
87 8550e097 Julien Enselme
current_date=$(date "+%Y-%m-%d-%Hh%Mm%Ss")
88 15ed27d8 Julien Enselme
sql_file="${dir_tmp}/${current_date}.${source_site_name}.sql"
89
drush -y "@${source_site_name}" sql-dump --result-file="${sql_file}"
90
sed -i -e "s#https?://assos.centrale-marseille.fr/${source_site_name}#https://assos.centrale-marseille.fr/${dest_site_name}#g" "${sql_file}"
91
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}"
92
drush "@${dest_site_name}" sql-drop
93
drush "@${dest_site_name}" sql-cli < "${sql_file}"
94 3e9236bd Julien Enselme
rm "${sql_file}"
95 42f1f46f Julien Enselme
96 71d02f8c Julien Enselme
## Restore file system
97 3e9236bd Julien Enselme
if [ -n "${private_path}" ] ; then
98 15ed27d8 Julien Enselme
    drush -y "@${dest_site_name}" vset file_private_path "${private_path}"
99 71d02f8c Julien Enselme
fi
100 3e9236bd Julien Enselme
if [ -n "${public_path}" ] ; then
101 15ed27d8 Julien Enselme
    drush -y "@${dest_site_name}" vset file_public_path "${public_path}"
102 71d02f8c Julien Enselme
fi
103 3e9236bd Julien Enselme
if [ -n "${temp_path}" ] ; then
104 15ed27d8 Julien Enselme
    drush -y "@${dest_site_name}" vset file_temporary_path "${temp_path}"
105 71d02f8c Julien Enselme
fi
106
107 15ed27d8 Julien Enselme
if "${prod}"; then
108
    drush -y "@${dest_site_name}" vset maintenance_mode 0
109 c9d0efbc Julien Enselme
else
110 15ed27d8 Julien Enselme
    drush -y "@${dest_site_name}" vset maintenance_mode 1
111 c9d0efbc Julien Enselme
fi