100 lines
3.8 KiB
Bash
Executable File
100 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2017 The Kubernetes Authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
set -o xtrace
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
# CONTAINERD_HOME is the directory for containerd.
|
|
CONTAINERD_HOME="/home/containerd"
|
|
cd "${CONTAINERD_HOME}"
|
|
|
|
# fetch_metadata fetches metadata from GCE metadata server.
|
|
# Var set:
|
|
# 1. Metadata key: key of the metadata.
|
|
fetch_metadata() {
|
|
local -r key=$1
|
|
local -r attributes="http://metadata.google.internal/computeMetadata/v1/instance/attributes"
|
|
if curl --fail --retry 5 --retry-delay 3 --silent --show-error -H "X-Google-Metadata-Request: True" "${attributes}/" | \
|
|
grep -q "^${key}$"; then
|
|
curl --fail --retry 5 --retry-delay 3 --silent --show-error -H "X-Google-Metadata-Request: True" \
|
|
"${attributes}/${key}"
|
|
fi
|
|
}
|
|
|
|
# DEPLOY_PATH is the gcs path where cri-containerd tarball is stored.
|
|
DEPLOY_PATH=${DEPLOY_PATH:-"cri-containerd-staging"}
|
|
# DEPLOY_PATH_METADATA is the metadata key of DEPLOY_PATH.
|
|
DEPLOY_PATH_METADATA="deploy-path"
|
|
deploy_path=$(fetch_metadata "${DEPLOY_PATH_METADATA}")
|
|
if [ ! -z "${deploy_path}" ]; then
|
|
DEPLOY_PATH=${deploy_path}
|
|
fi
|
|
|
|
# PULL_REFS_METADATA is the metadata key of PULL_REFS from prow.
|
|
PULL_REFS_METADATA="PULL_REFS"
|
|
pull_refs=$(fetch_metadata "${PULL_REFS_METADATA}")
|
|
if [ ! -z "${pull_refs}" ]; then
|
|
deploy_dir=$(echo "${pull_refs}" | sha1sum | awk '{print $1}')
|
|
DEPLOY_PATH="${DEPLOY_PATH}/${deploy_dir}"
|
|
fi
|
|
|
|
# PKG_PREFIX is the prefix of the cri-containerd tarball name.
|
|
# By default use the release tarball with cni built in.
|
|
PKG_PREFIX=${PKG_PREFIX:-"cri-containerd-cni"}
|
|
# PKG_PREFIX_METADATA is the metadata key of PKG_PREFIX.
|
|
PKG_PREFIX_METADATA="pkg-prefix"
|
|
pkg_prefix=$(fetch_metadata "${PKG_PREFIX_METADATA}")
|
|
if [ ! -z "${pkg_prefix}" ]; then
|
|
PKG_PREFIX=${pkg_prefix}
|
|
fi
|
|
|
|
# VERSION is the latest cri-containerd version got from cri-containerd gcs
|
|
# bucket.
|
|
# TODO(random-liu): Put version into the metadata instead of
|
|
# deciding it in cloud init. This may cause issue to reboot test.
|
|
VERSION=$(curl -f --ipv4 --retry 6 --retry-delay 3 --silent --show-error \
|
|
https://storage.googleapis.com/${DEPLOY_PATH}/latest)
|
|
# TARBALL_GCS_PATH is the path to download cri-containerd tarball for node e2e.
|
|
TARBALL_GCS_PATH="https://storage.googleapis.com/${DEPLOY_PATH}/${PKG_PREFIX}-${VERSION}.linux-amd64.tar.gz"
|
|
# TARBALL is the name of the tarball after being downloaded.
|
|
TARBALL="cri-containerd.tar.gz"
|
|
|
|
# Download and untar the release tar ball.
|
|
curl -f --ipv4 -Lo "${TARBALL}" --connect-timeout 20 --max-time 300 --retry 6 --retry-delay 10 "${TARBALL_GCS_PATH}"
|
|
tar xvf "${TARBALL}"
|
|
|
|
# Copy crictl config.
|
|
cp "${CONTAINERD_HOME}/etc/crictl.yaml" /etc
|
|
|
|
# TODO(random-liu): Stop docker on the node, this may break docker.
|
|
echo "export PATH=${CONTAINERD_HOME}/usr/local/bin/:${CONTAINERD_HOME}/usr/local/sbin/:\$PATH" > \
|
|
/etc/profile.d/containerd_env.sh
|
|
|
|
# EXTRA_INIT_SCRIPT is the name of the extra init script after being downloaded.
|
|
EXTRA_INIT_SCRIPT="extra-init.sh"
|
|
# EXTRA_INIT_SCRIPT_METADATA is the metadata key of init script.
|
|
EXTRA_INIT_SCRIPT_METADATA="extra-init-sh"
|
|
extra_init=$(fetch_metadata "${EXTRA_INIT_SCRIPT_METADATA}")
|
|
# Return if extra-init-sh is not set.
|
|
if [ -z "${extra_init}" ]; then
|
|
exit 0
|
|
fi
|
|
echo "${extra_init}" > "${EXTRA_INIT_SCRIPT}"
|
|
chmod 544 "${EXTRA_INIT_SCRIPT}"
|
|
./${EXTRA_INIT_SCRIPT}
|