Skip to content

Commit 8d2c79f

Browse files
committed
Merge pull request #6 from github/backup-manage-password
Support backup/restore of enterprise-manage password hash
2 parents 8138258 + e2080f5 commit 8d2c79f

5 files changed

Lines changed: 68 additions & 2 deletions

File tree

bin/ghe-backup

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,25 @@ echo "Backing up GitHub settings ..."
9494
ghe-ssh "$host" -- 'ghe-export-settings' > settings.json ||
9595
failures="$failures settings"
9696

97+
# transfer license file
9798
ghe-ssh "$host" -- "cat '$GHE_REMOTE_LICENSE_FILE'" > enterprise.ghl ||
9899
failures="$failures license"
99100

101+
# transfer enterprise manage password hash if running against a v2.x instance.
102+
if [ "$GHE_VERSION_MAJOR" -ge 2 ]; then
103+
manage_password_file="$GHE_REMOTE_DATA_USER_DIR/common/manage-password"
104+
if echo "sudo cat '$manage_password_file' 2>/dev/null || true" |
105+
ghe-ssh "$host" -- /bin/sh > manage-password+
106+
then
107+
if [ -n "$(cat manage-password+)" ]; then
108+
mv manage-password+ manage-password
109+
fi
110+
else
111+
unlink manage-password+
112+
failures="$failures manage-password"
113+
fi
114+
fi
115+
100116
echo "Backing up SSH authorized keys ..."
101117
ghe-ssh "$host" -- 'ghe-export-authorized-keys' > authorized-keys.json ||
102118
failures="$failures authorized-keys"

bin/ghe-restore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ if $clean_restore; then
9494
echo "Restoring license ..."
9595
ghe-ssh "$host" -- 'ghe-import-license' < "$GHE_RESTORE_SNAPSHOT_PATH/enterprise.ghl" 1>&3
9696

97+
if [ -f "$GHE_RESTORE_SNAPSHOT_PATH/manage-password" ]; then
98+
echo "Restoring management console password ..."
99+
cat "$GHE_RESTORE_SNAPSHOT_PATH/manage-password" |
100+
ghe-ssh "$host" -- \
101+
"sudo -u git dd of='$GHE_REMOTE_DATA_USER_DIR/common/manage-password' 2>&1"
102+
ghe-ssh "$host" -- \
103+
"sudo -u git chmod 0600 '$GHE_REMOTE_DATA_USER_DIR/common/manage-password'"
104+
fi
105+
97106
echo "
98107
sudo ghe-service-ensure-mysql &&
99108
sudo ghe-service-ensure-elasticsearch

test/test-ghe-backup.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ cd "$GHE_REMOTE_DATA_USER_DIR/pages"
1313
mkdir -p alice bob
1414
touch alice/index.html bob/index.html
1515

16+
# Create a fake manage password file
17+
mkdir -p "$GHE_REMOTE_DATA_USER_DIR/common"
18+
echo "fake password hash data" > "$GHE_REMOTE_DATA_USER_DIR/common/manage-password"
19+
1620
# Create some fake elasticsearch data in the remote data directory
1721
mkdir -p "$GHE_REMOTE_DATA_USER_DIR/elasticsearch"
1822
cd "$GHE_REMOTE_DATA_USER_DIR/elasticsearch"
@@ -102,6 +106,11 @@ begin_test "ghe-backup first snapshot"
102106
# verify all ES data was transferred from snapshot directory
103107
diff -ru "$GHE_REMOTE_DATA_USER_DIR/elasticsearch-snapshots" "$GHE_DATA_DIR/current/elasticsearch"
104108
fi
109+
110+
# verify manage-password file was backed up under v2.x VMs
111+
if [ "$GHE_VERSION_MAJOR" -ge 2 ]; then
112+
[ "$(cat "$GHE_DATA_DIR/current/manage-password")" = "fake password hash data" ]
113+
fi
105114
)
106115
end_test
107116

@@ -167,6 +176,11 @@ begin_test "ghe-backup subsequent snapshot"
167176
# verify all ES data was transferred from snapshot directory
168177
diff -ru "$GHE_REMOTE_DATA_USER_DIR/elasticsearch-snapshots" "$GHE_DATA_DIR/current/elasticsearch"
169178
fi
179+
180+
# verify manage-password file was backed up under v2.x VMs
181+
if [ "$GHE_VERSION_MAJOR" -ge 2 ]; then
182+
[ "$(cat "$GHE_DATA_DIR/current/manage-password")" = "fake password hash data" ]
183+
fi
170184
)
171185
end_test
172186

@@ -208,5 +222,18 @@ begin_test "ghe-backup fails fast when other run in progress"
208222

209223
ln -s 1 "$GHE_DATA_DIR/in-progress"
210224
! ghe-backup
225+
226+
unlink "$GHE_DATA_DIR/in-progress"
227+
)
228+
end_test
229+
230+
begin_test "ghe-backup without manage-password file"
231+
(
232+
set -e
233+
234+
unlink "$GHE_REMOTE_DATA_USER_DIR/common/manage-password"
235+
ghe-backup
236+
237+
[ ! -f "$GHE_DATA_DIR/current/manage-password" ]
211238
)
212239
end_test

test/test-ghe-restore.sh

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ echo "fake ghe-export-ssh-host-keys data" > "$GHE_DATA_DIR/current/ssh-host-keys
4343
echo "fake ghe-export-repositories data" > "$GHE_DATA_DIR/current/repositories.tar"
4444
echo "fake ghe-export-settings data" > "$GHE_DATA_DIR/current/settings.json"
4545
echo "fake license data" > "$GHE_DATA_DIR/current/enterprise.ghl"
46+
echo "fake manage password hash data" > "$GHE_DATA_DIR/current/manage-password"
4647
echo "rsync" > "$GHE_DATA_DIR/current/strategy"
4748

4849
begin_test "ghe-restore into unconfigured vm"
@@ -56,8 +57,10 @@ begin_test "ghe-restore into unconfigured vm"
5657
export GHE_RESTORE_HOST
5758

5859
# run ghe-restore and write output to file for asserting against
59-
ghe-restore -v > "$TRASHDIR/restore-out" 2>&1
60-
cat "$TRASHDIR/restore-out"
60+
if ! ghe-restore -v > "$TRASHDIR/restore-out" 2>&1; then
61+
cat "$TRASHDIR/restore-out"
62+
false
63+
fi
6164

6265
# verify connect to right host
6366
grep -q "Connect 127.0.0.1 OK" "$TRASHDIR/restore-out"
@@ -78,6 +81,12 @@ begin_test "ghe-restore into unconfigured vm"
7881
test -d "$GHE_REMOTE_DATA_USER_DIR/elasticsearch-legacy"
7982
fi
8083

84+
# verify manage password was restored under v2.x or greater VMs
85+
if [ "$GHE_VERSION_MAJOR" -ge 2 ]; then
86+
test -f "$GHE_REMOTE_DATA_USER_DIR/common/manage-password"
87+
[ "$(cat "$GHE_REMOTE_DATA_USER_DIR/common/manage-password")" = "fake manage password hash data" ]
88+
fi
89+
8190
# verify service-ensure scripts were run under versions >= v2.x
8291
if [ "$GHE_VERSION_MAJOR" -ge 2 ]; then
8392
grep -q "ghe-service-ensure-mysql OK" "$TRASHDIR/restore-out"

test/testlib.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ cd "$TRASHDIR"
7777
setup_remote_metadata () {
7878
mkdir -p "$GHE_REMOTE_DATA_DIR" "$GHE_REMOTE_DATA_USER_DIR"
7979
mkdir -p "$(dirname "$GHE_REMOTE_METADATA_FILE")"
80+
81+
if [ "$GHE_VERSION_MAJOR" -ge 2 ]; then
82+
mkdir -p "$GHE_REMOTE_DATA_USER_DIR/common"
83+
fi
84+
8085
echo '
8186
{
8287
"timestamp": "Wed Jul 30 13:48:52 +0000 2014",

0 commit comments

Comments
 (0)