3 # https://dcos.io/docs/1.8/administration/upgrading/
4 # https://dcos.io/docs/1.7/administration/upgrading/
6 PATH=.:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:`dirname $0`
8 install_dir=<%= File.dirname(node['dcos-grid']['bootstrap']['genconf_dir']) %>
9 release_script_name=<%= node['dcos-grid']['dcos_release_script_name'] %>
10 rel_checksum='<%= node['dcos-grid']['dcos_release_checksum'] %>'
11 port=<%= node['dcos-grid']['bootstrap']['port'] %>
14 echo 'Usage: bootstrap_upgrade.sh [-c] [-E] [-y] [-W] [-h]'
15 echo 'This script upgrades DC/OS bootstrap node.'
18 echo " -c: commit upgrade."
19 echo " -E: don't update DC/OS release ($release_script_name)."
20 echo " -h: this help."
21 echo " -y: always yes."
22 echo " -W: why-run mode."
28 echo "[`date '+%Y-%m-%d %H:%M:%S %:z'`] Command: $CMD"
29 [ "$why_run" = 1 ] || eval $CMD
34 while getopts 'cEyWh' OPT; do
40 preserve_same_version=1
62 [ `whoami` = 'root' ] && sudo=''
66 [ "$always_yes" = 1 ] && break
68 echo -n 'Continue the process? [y/N]: '
75 echo 'Process was aborted by user.'
85 echo 'Restart the nginx (Docker container) ...'
86 container_id=`$sudo docker ps | grep "${port}->80/tcp" | awk '{print $1}'`
87 if [ "$container_id" != '' ]; then
88 echo "Docker container (ID: $container_id) for the bootstrap service is already running."
89 echo 'Stop the container ...'
90 execute "$sudo docker stop $container_id"
93 echo 'Launching Docker container for the bootstrap service ...'
94 execute "$sudo docker run -d -p ${port}:80 -v $PWD/genconf/serve:/usr/share/nginx/html:ro nginx"
98 execute "cd $install_dir"
100 echo 'Back up the current installation script ...'
101 execute "$sudo mv ./genconf/serve{,-`date '+%Y%m%d_%H%M%S'`}"
103 if [ "$preserve_same_version" = 1 ]; then
104 dcos_release_script="${install_dir}/${release_script_name}"
105 if [ -e "$dcos_release_script" ]; then
106 echo "Preserve same DC/OS release ($dcos_release_script)."
108 echo "[ERROR] Existing DC/OS release ($dcos_release_script) is not found on the local filesystem."
112 echo 'Downloading new DC/OS release ...'
113 execute "$sudo curl -O <%= node['dcos-grid']['dcos_release_url'] %>"
114 if [ "$rel_checksum" != '' ]; then
115 if [ "$(sha256sum $release_script_name | awk '{print $1}')" != $rel_checksum ]; then
116 echo '[ERROR] dcos binary file checksum mismatch.'
117 execute "$sudo rm $release_script_name"
123 echo 'Generating new DC/OS configurations ...'
124 execute "$sudo bash $release_script_name"
126 echo 'Back up the generated dcos_install.sh script ...'
127 execute "$sudo cp -a ./genconf/serve/dcos_install.sh{,.pkg-dist}"
129 echo 'Disable Docker restarts in dcos_install.sh'
130 execute "$sudo sed -i -e 's/systemctl restart systemd-journald//g' -e 's/systemctl restart docker//g' genconf/serve/dcos_install.sh"
135 Please execute the following command in preparation to get new node in on the cluster
136 after the cluster upgrade finished.
137 $ ${install_dir}/bootstrap_upgrade.sh -c
142 echo 'Commit the upgrade ...'
143 execute "cd $install_dir"
144 if [ -e ./genconf/serve/dcos_install.sh -a -e ./genconf/serve/dcos_install.sh.pkg-dist ]; then
145 execute "$sudo mv ./genconf/serve/dcos_install{,4upgrade}.sh"
146 execute "$sudo mv ./genconf/serve/dcos_install.sh{.pkg-dist,}"
150 echo '[ERROR] ./genconf/serve/dcos_install.sh or ./genconf/serve/dcos_install.sh.pkg-dist does not exist.'
156 if [ "$commit_flag" = 1 ]; then
157 echo 'This upgrade will be commited.'
161 echo 'This node will be upgraded as a Bootstrap node.'