-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupgrade.sh
executable file
·160 lines (122 loc) · 4.31 KB
/
upgrade.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/bash
# SPDX-FileCopyrightText: 2022 Wilfred Nicoll <xyzroller@rollyourown.xyz>
# SPDX-License-Identifier: GPL-3.0-or-later
# upgrade.sh
# This script upgrades the modules required for the project and upgrades the project components
# Required modules (space-separated list in the form "module_1 module_2 module_3")
MODULES="<MODULE_1> <MODULE_2> <MODULE_3>"
# Help and error messages
#########################
helpMessage()
{
echo "upgrade.sh: Upgrade a rollyourown project"
echo "Usage: ./upgrade.sh -n hostname -v version"
echo "Flags:"
echo -e "-n hostname \t\t(Mandatory) Name of the host on which to upgrade the project"
echo -e "-v version \t\t(Mandatory) Version stamp for images to upgrade, e.g. 20210101-1"
echo -e "-h \t\t\tPrint this help message"
echo ""
exit 1
}
errorMessage()
{
echo "Invalid option or input variables are missing"
echo "Use \"./deploy.sh -h\" for help"
exit 1
}
# Command-line input handling
#############################
while getopts n:v:h flag
do
case "${flag}" in
n) hostname=${OPTARG};;
v) version=${OPTARG};;
h) helpMessage ;;
?) errorMessage ;;
esac
done
if [ -z "$hostname" ] || [ -z "$version" ]; then
errorMessage
fi
# Script directory
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
# Get Project ID from configuration file
PROJECT_ID="$(yq eval '.project_id' "$SCRIPT_DIR"/configuration/configuration_"$hostname".yml)"
# Get remote_build variable from configuration file
REMOTE="$(yq eval '.remote_build' "$SCRIPT_DIR"/configuration/configuration_"$hostname".yml)"
# Info
echo "rollyourown upgrade script for "$PROJECT_ID""
# Update project repository
###########################
echo "Refreshing project repository with git pull to get the current version"
cd "$SCRIPT_DIR" && git pull
# Option to back up the project before upgrading
################################################
echo " "
echo "!!! An upgrade may fail and break your project deployment. "
echo "!!! It is recommended to back up your project before upgrading. "
echo " "
echo "Do you want to create a backup of "$PROJECT_ID" on "$hostname" before upgrading? (y/n)"
echo "Default is 'y'."
echo -n "Back up "$PROJECT_ID" on "$hostname"? "
read -e -p "[y/n]: " BACKUP_FIRST
BACKUP_FIRST="${BACKUP_FIRST:-"y"}"
BACKUP_FIRST="${BACKUP_FIRST,,}"
# Check input
while [ ! "$BACKUP_FIRST" == "y" ] && [ ! "$BACKUP_FIRST" == "n" ]
do
echo "Invalid option "${BACKUP_FIRST}". Please try again."
echo -n "Back up "$PROJECT_ID" on "$hostname"? "
read -e -p "[y/n]: " BACKUP_FIRST
BACKUP_FIRST="${BACKUP_FIRST:-"y"}"
BACKUP_FIRST="${BACKUP_FIRST,,}"
done
if [ "$BACKUP_FIRST" == "y" ]; then
# Get backup stamp as input
echo""
echo -n "Enter a stamp (e.g. date, time, name) to identify the backup"
read -e -p ": " BACKUP_STAMP
/bin/bash "$SCRIPT_DIR"/backup.sh -n "$hostname" -s "$BACKUP_STAMP"
fi
# Upgrade Modules
#################
# For each module, do module upgrade if user agrees
echo ""
echo "Module upgrades"
for module in $MODULES
do
echo ""
echo -n "Upgrade "$module" module (default is 'n')? "
read -e -p "[y/n]:" UPGRADE_MODULE
UPGRADE_MODULE="${UPGRADE_MODULE:-"n"}"
UPGRADE_MODULE="${UPGRADE_MODULE,,}"
# Check input
while [ ! "$UPGRADE_MODULE" == "y" ] && [ ! "$UPGRADE_MODULE" == "n" ]
do
echo "Invalid option "${UPGRADE_MODULE}". Please try again."
echo -n "Upgrade "$module" module (default is 'n')? "
read -e -p "[y/n]:" UPGRADE_MODULE
UPGRADE_MODULE="${UPGRADE_MODULE:-"y"}"
UPGRADE_MODULE="${UPGRADE_MODULE,,}"
done
if [ "$UPGRADE_MODULE" == "y" ]; then
echo "Upgrading "$module" module."
# Upgrade module
echo ""
echo "Upgrading "$module" module on "$hostname" with version "$version""
/bin/bash "$SCRIPT_DIR"/../"$module"/upgrade.sh -n "$hostname" -v "$version" -b "$REMOTE"
else
echo ""
echo "Skipping "$module" module upgrade."
fi
done
# Upgrade project components
############################
# Build new project images
echo ""
echo "Building new image(s) for "$PROJECT_ID" on "$hostname""
/bin/bash "$SCRIPT_DIR"/scripts-project/build-image-project.sh -n "$hostname" -v "$version" -r "$REMOTE"
# Deploy project containers
echo ""
echo "Deploying new image(s) for "$PROJECT_ID" on "$hostname""
/bin/bash "$SCRIPT_DIR"/scripts-project/deploy-project.sh -n "$hostname" -v "$version"