Skip to content
Snippets Groups Projects
Commit 0bc87527 authored by garciadeblas's avatar garciadeblas
Browse files

Feature 10892/10893/8460: refactor of OSM installer


This change covers:

- Feature 10892. Installation of OSM on top of Ubuntu20.04. Changes
  are mostly in full_install_osm.sh and are related to the use of new
  versions of kubeadm and docker-ce. In addition, changes in Jenkins
  groovy files have been done to indicate the base image to be used,
  either 18.04 or 20.04.
- Feature 10893. Better tracking of installation. The code for tracking
  in in common/track. There is a function track that it is called in
  the different steps of the installation.
- Feature 8460: Cleanup old code in full_install_osm.sh. The script
  full_install_osm.sh has been split in different scripts performing
  specific tasks, thus simplifying the installer: install_docker_ce.sh,
  install_juju.sh and install_kubeadm_cluster.sh.

Change-Id: I1e388ec56285337eaf34f68470aa5a9b23ff45ff
Signed-off-by: default avatargarciadeblas <gerardo.garciadeblas@telefonica.com>
parent 413bc263
No related branches found
Tags release-v11.0-start
No related merge requests found
......@@ -22,7 +22,7 @@ if [ -z "$OSM_DEVOPS" ]; then
export OSM_DEVOPS=$(realpath ${BASH_SOURCE[0]} )
fi
for file in logging config container git_functions; do
for file in logging config container git_functions track; do
. ${OSM_DEVOPS}/common/$file
INFO "$file sourced"
done
......@@ -45,11 +45,11 @@ WARNING() {
}
INFO() {
echo "## $(date) ${FUNCNAME[1]}: $*" >&2
echo "## $(date) ${FUNCNAME[1]}: INFO: $*" >&2
}
DEBUG() {
echo "# $(date) ${FUNCNAME[1]}: $*" >&2
echo "# $(date) ${FUNCNAME[1]}: DEBUG: $*" >&2
}
CMD() {
......
#!/bin/bash
# This file is meant to be SOURCED
#
# 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.
#
function track(){
# Tracks events by sending HTTP GET requests with query strings to a web server
# - First argument: event name
# - Rest of arguments (if they exist): tuples of operation-value-comment-tags
# - operation: particular operation in an event (if it is not provided, the operation will be named after the event)
# - value: particular value for an operation
# - comment
# - none will be passed when empty
# - will be parsed to replace spaces by underscores
# - tags
# - none will be passed when empty
# - will be parsed to replace spaces by ~
if [ $# -lt 1 ]; then
echo "Unexpected error in track function. At least 1 arg is expected: event"
return 1
fi
osm_track_event_name=$1
ctime=`date +%s`
query_string=""
query_string="${query_string}&installation_id=${OSM_TRACK_INSTALLATION_ID}"
query_string="${query_string}&local_ts=${ctime}"
query_string="${query_string}&event=${osm_track_event_name}"
shift 1
if [ $# -eq 0 ]; then
operation="${osm_track_event_name}"
value=""
comment=""
tags=""
final_query_string="${query_string}"
final_query_string="${final_query_string}&operation=${operation}"
final_query_string="${final_query_string}&value=${value}"
final_query_string="${final_query_string}&comment=${comment}"
final_query_string="${final_query_string}&tags=${tags}"
url="https://osm.etsi.org/InstallLog.php?${final_query_string}"
echo "Track $osm_track_event_name $operation: ${url}"
wget -q -O /dev/null $url
else
while (( "$#" > 0 )); do
operation="${1:-${osm_track_event_name}}"
shift 1
value="${1:-}"
shift 1
comment="${1:-}"
shift 1
comment="${comment// /_}"
tags="${1:-}"
shift 1
tags="${tags//,/\~}"
[ "$value" == "none" ] && value=""
[ "$comment" == "none" ] && comment=""
[ "$tags" == "none" ] && tags=""
final_query_string="${query_string}"
final_query_string="${final_query_string}&operation=${operation}"
final_query_string="${final_query_string}&value=${value}"
final_query_string="${final_query_string}&comment=${comment}"
final_query_string="${final_query_string}&tags=${tags}"
url="https://osm.etsi.org/InstallLog.php?${final_query_string}"
echo "Track $osm_track_event_name $operation: ${url}"
wget -q -O /dev/null $url
done
fi
return 0
}
This diff is collapsed.
#!/bin/bash
#
# 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 +eux
function install_docker_ce() {
# installs and configures Docker CE
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
echo "Installing Docker CE ..."
sudo apt-get -qq update
sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -qq update
sudo apt-get install -y docker-ce
# echo "Reconfiguring Docker to use systemd as cgroup driver"
# if [ ! -f /etc/docker/daemon.json ]; then
# sudo bash -c "cat <<EOF > /etc/docker/daemon.json
#{
# \"exec-opts\": [\"native.cgroupdriver=systemd\"],
# \"log-driver\": \"json-file\",
# \"log-opts\": {
# \"max-size\": \"100m\"
# },
# \"storage-driver\": \"overlay2\"
#}
#EOF"
# else
# sudo sed -i "s|native.cgroupdriver=cgroupfs|native.cgroupdriver=systemd|" /etc/docker/daemon.json
# fi
echo "Adding user to group 'docker'"
sudo groupadd -f docker
sudo usermod -aG docker $USER
sleep 2
#sudo systemctl enable docker
#sudo systemctl daemon-reload
#sudo systemctl restart docker
sudo service docker restart
echo "... restarted Docker service"
if [ -n "${DOCKER_PROXY_URL}" ]; then
echo "Configuring docker proxy ..."
if [ -f /etc/docker/daemon.json ]; then
if grep -q registry-mirrors /etc/docker/daemon.json; then
sudo sed -i "s|registry-mirrors.*|registry-mirrors\": [\"${DOCKER_PROXY_URL}\"] |" /etc/docker/daemon.json
else
sudo sed -i "s|^{|{\n \"registry-mirrors\": [\"${DOCKER_PROXY_URL}\"],|" /etc/docker/daemon.json
fi
else
sudo bash -c "cat << EOF > /etc/docker/daemon.json
{
\"registry-mirrors\": [\"${DOCKER_PROXY_URL}\"]
}
EOF"
fi
#sudo systemctl enable docker
sudo systemctl daemon-reload
#sudo systemctl restart docker
sudo service docker restart
echo "... restarted Docker service again"
fi
[ -z "${DEBUG_INSTALL}" ] || ! echo "File: /etc/docker/daemon.json" || cat /etc/docker/daemon.json
sg docker -c "docker version" || FATAL "Docker installation failed"
echo "... Docker CE installation done"
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
return 0
}
while getopts ":D:p:-: " o; do
case "${o}" in
D)
OSM_DEVOPS="${OPTARG}"
;;
p)
DOCKER_PROXY_URL="${OPTARG}"
;;
-)
[ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="y" && continue
echo -e "Invalid option: '--$OPTARG'\n" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument" >&2
exit 1
;;
\?)
echo -e "Invalid option: '-$OPTARG'\n" >&2
exit 1
;;
*)
exit 1
;;
esac
done
source $OSM_DEVOPS/common/logging
echo "DEBUG_INSTALL=$DEBUG_INSTALL"
echo "DOCKER_PROXY_URL=$DOCKER_PROXY_URL"
echo "USER=$USER"
install_docker_ce
#!/bin/bash
#
# 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.
#
function usage(){
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
echo -e "usage: $0 [OPTIONS]"
echo -e "Install Juju for OSM"
echo -e " OPTIONS"
echo -e " -h / --help: print this help"
echo -e " -D <devops path> use local devops installation path"
echo -e " -s <stack name> or <namespace> user defined stack name when installed using swarm or namespace when installed using k8s, default is osm"
echo -e " -H <VCA host> use specific juju host controller IP"
echo -e " -S <VCA secret> use VCA/juju secret key"
echo -e " -P <VCA pubkey> use VCA/juju public key file"
echo -e " -l: LXD cloud yaml file"
echo -e " -L: LXD credentials yaml file"
echo -e " -K: Specifies the name of the controller to use - The controller must be already bootstrapped"
echo -e " --debug: debug mode"
echo -e " --cachelxdimages: cache local lxd images, create cronjob for that cache (will make installation longer)"
echo -e " --nojuju: do not juju, assumes already installed"
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function update_juju_images(){
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
crontab -l | grep update-juju-lxc-images || (crontab -l 2>/dev/null; echo "0 4 * * 6 $USER ${OSM_DEVOPS}/installers/update-juju-lxc-images --xenial --bionic") | crontab -
${OSM_DEVOPS}/installers/update-juju-lxc-images --xenial --bionic
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function install_juju() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
echo "Installing juju"
sudo snap install juju --classic --channel=$JUJU_VERSION/stable
[[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
[ -n "$INSTALL_CACHELXDIMAGES" ] && update_juju_images
echo "Finished installation of juju"
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
return 0
}
function juju_createcontroller_k8s(){
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
cat $HOME/.kube/config | juju add-k8s $OSM_VCA_K8S_CLOUDNAME --client \
|| FATAL "Failed to add K8s endpoint and credential for client in cloud $OSM_VCA_K8S_CLOUDNAME"
juju bootstrap $OSM_VCA_K8S_CLOUDNAME $OSM_STACK_NAME \
--config controller-service-type=loadbalancer \
--agent-version=$JUJU_AGENT_VERSION \
|| FATAL "Failed to bootstrap controller $OSM_STACK_NAME in cloud $OSM_VCA_K8S_CLOUDNAME"
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function juju_addlxd_cloud(){
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
mkdir -p /tmp/.osm
OSM_VCA_CLOUDNAME="lxd-cloud"
LXDENDPOINT=$DEFAULT_IP
LXD_CLOUD=/tmp/.osm/lxd-cloud.yaml
LXD_CREDENTIALS=/tmp/.osm/lxd-credentials.yaml
cat << EOF > $LXD_CLOUD
clouds:
$OSM_VCA_CLOUDNAME:
type: lxd
auth-types: [certificate]
endpoint: "https://$LXDENDPOINT:8443"
config:
ssl-hostname-verification: false
EOF
openssl req -nodes -new -x509 -keyout /tmp/.osm/client.key -out /tmp/.osm/client.crt -days 365 -subj "/C=FR/ST=Nice/L=Nice/O=ETSI/OU=OSM/CN=osm.etsi.org"
local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/ /'`
local client_cert=`cat /tmp/.osm/client.crt | sed 's/^/ /'`
local client_key=`cat /tmp/.osm/client.key | sed 's/^/ /'`
cat << EOF > $LXD_CREDENTIALS
credentials:
$OSM_VCA_CLOUDNAME:
lxd-cloud:
auth-type: certificate
server-cert: |
$server_cert
client-cert: |
$client_cert
client-key: |
$client_key
EOF
lxc config trust add local: /tmp/.osm/client.crt
juju add-cloud -c $OSM_STACK_NAME $OSM_VCA_CLOUDNAME $LXD_CLOUD --force
juju add-credential -c $OSM_STACK_NAME $OSM_VCA_CLOUDNAME -f $LXD_CREDENTIALS
sg lxd -c "lxd waitready"
juju controller-config features=[k8s-operators]
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function juju_createcontroller() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
# Not found created, create the controller
sudo usermod -a -G lxd ${USER}
sg lxd -c "juju bootstrap --bootstrap-series=xenial --agent-version=$JUJU_AGENT_VERSION $OSM_VCA_CLOUDNAME $OSM_STACK_NAME"
fi
[ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
juju controller-config features=[k8s-operators]
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#Safe unattended install of iptables-persistent
function check_install_iptables_persistent(){
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
echo -e "\nChecking required packages: iptables-persistent"
if ! dpkg -l iptables-persistent &>/dev/null; then
echo -e " Not installed.\nInstalling iptables-persistent requires root privileges"
echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
sudo apt-get -yq install iptables-persistent
fi
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function juju_createproxy() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
check_install_iptables_persistent
if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
sudo netfilter-persistent save
fi
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
DEBUG_INSTALL=""
INSTALL_CACHELXDIMAGES=""
INSTALL_NOJUJU=""
JUJU_AGENT_VERSION=2.9.17
JUJU_VERSION=2.9
OSM_DEVOPS=
OSM_STACK_NAME=osm
OSM_VCA_HOST=
OSM_VCA_CLOUDNAME="localhost"
OSM_VCA_K8S_CLOUDNAME="k8scloud"
RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
while getopts ":D:i:s:H:l:L:K:-: h" o; do
case "${o}" in
D)
OSM_DEVOPS="${OPTARG}"
;;
i)
DEFAULT_IP="${OPTARG}"
;;
s)
OSM_STACK_NAME="${OPTARG}" && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
;;
H)
OSM_VCA_HOST="${OPTARG}"
;;
l)
LXD_CLOUD_FILE="${OPTARG}"
;;
L)
LXD_CRED_FILE="${OPTARG}"
;;
K)
CONTROLLER_NAME="${OPTARG}"
;;
-)
[ "${OPTARG}" == "help" ] && usage && exit 0
[ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="--debug" && continue
[ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
[ "${OPTARG}" == "cachelxdimages" ] && INSTALL_CACHELXDIMAGES="y" && continue
echo -e "Invalid option: '--$OPTARG'\n" >&2
usage && exit 1
;;
:)
echo "Option -$OPTARG requires an argument" >&2
usage && exit 1
;;
\?)
echo -e "Invalid option: '-$OPTARG'\n" >&2
usage && exit 1
;;
h)
usage && exit 0
;;
*)
usage && exit 1
;;
esac
done
source $OSM_DEVOPS/common/logging
source $OSM_DEVOPS/common/track
echo "DEBUG_INSTALL=$DEBUG_INSTALL"
echo "DEFAULT_IP=$DEFAULT_IP"
echo "OSM_DEVOPS=$OSM_DEVOPS"
echo "HOME=$HOME"
[ -z "$INSTALL_NOJUJU" ] && install_juju
track juju_install
if [ -z "$OSM_VCA_HOST" ]; then
if [ -z "$CONTROLLER_NAME" ]; then
juju_createcontroller_k8s
juju_addlxd_cloud
if [ -n "$LXD_CLOUD_FILE" ]; then
[ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
OSM_VCA_CLOUDNAME="lxd-cloud"
juju add-cloud $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud $OSM_VCA_CLOUDNAME --client -f $LXD_CLOUD_FILE
juju add-credential $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential $OSM_VCA_CLOUDNAME lxd-cloud-creds -f $LXD_CRED_FILE
fi
juju_createcontroller
juju_createproxy
else
OSM_VCA_CLOUDNAME="lxd-cloud"
if [ -n "$LXD_CLOUD_FILE" ]; then
[ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
juju add-cloud -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud lxd-cloud -c $CONTROLLER_NAME -f $LXD_CLOUD_FILE
juju add-credential -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential lxd-cloud -c $CONTROLLER_NAME -f $LXD_CRED_FILE
else
mkdir -p ~/.osm
cat << EOF > ~/.osm/lxd-cloud.yaml
clouds:
lxd-cloud:
type: lxd
auth-types: [certificate]
endpoint: "https://$DEFAULT_IP:8443"
config:
ssl-hostname-verification: false
EOF
openssl req -nodes -new -x509 -keyout ~/.osm/client.key -out ~/.osm/client.crt -days 365 -subj "/C=FR/ST=Nice/L=Nice/O=ETSI/OU=OSM/CN=osm.etsi.org"
local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/ /'`
local client_cert=`cat ~/.osm/client.crt | sed 's/^/ /'`
local client_key=`cat ~/.osm/client.key | sed 's/^/ /'`
cat << EOF > ~/.osm/lxd-credentials.yaml
credentials:
lxd-cloud:
lxd-cloud:
auth-type: certificate
server-cert: |
$server_cert
client-cert: |
$client_cert
client-key: |
$client_key
EOF
lxc config trust add local: ~/.osm/client.crt
juju add-cloud -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME ~/.osm/lxd-cloud.yaml --force || juju update-cloud lxd-cloud -c $CONTROLLER_NAME -f ~/.osm/lxd-cloud.yaml
juju add-credential -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME -f ~/.osm/lxd-credentials.yaml || juju update-credential lxd-cloud -c $CONTROLLER_NAME -f ~/.osm/lxd-credentials.yaml
fi
fi
[ -z "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
[ -n "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`juju show-controller $CONTROLLER_NAME |grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
[ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
fi
track juju_controller
#!/bin/bash
#
# 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 +eux
#installs kubernetes packages
function install_kube() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
K8S_VERSION=1.20.11-00
# To check other available versions, run the following command
# curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}'
sudo apt-get update && sudo apt-get install -y apt-transport-https
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get update
echo "Installing Kubernetes Packages ..."
sudo apt-get install -y kubelet=${K8S_VERSION} kubeadm=${K8S_VERSION} kubectl=${K8S_VERSION}
sudo apt-mark hold kubelet kubeadm kubectl
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#initializes kubernetes control plane
function init_kubeadm() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
sudo swapoff -a
sudo sed -i.bak '/.*none.*swap/s/^\(.*\)$/#\1/g' /etc/fstab
sudo kubeadm init --config $1
sleep 5
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function kube_config_dir() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
[ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#deploys flannel as daemonsets
function deploy_cni_provider() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
trap 'rm -rf "${CNI_DIR}"' EXIT
wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
kubectl apply -f $CNI_DIR
[ $? -ne 0 ] && FATAL "Cannot Install Flannel"
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#taints K8s master node
function taint_master_node() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
sleep 5
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#Install Helm v3
function install_helm() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
helm > /dev/null 2>&1
if [ $? != 0 ] ; then
# Helm is not installed. Install helm
echo "Helm is not installed, installing ..."
curl https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz --output helm-v3.6.3.tar.gz
tar -zxvf helm-v3.6.3.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
rm -r linux-amd64
rm helm-v3.6.3.tar.gz
helm repo add stable https://charts.helm.sh/stable
helm repo update
fi
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function install_k8s_storageclass() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
OPENEBS_VERSION="1.12.0"
echo "Installing OpenEBS"
helm repo add openebs https://openebs.github.io/charts
helm repo update
helm install --create-namespace --namespace openebs openebs openebs/openebs --version ${OPENEBS_VERSION}
helm ls -n openebs
local storageclass_timeout=400
local counter=0
local storageclass_ready=""
echo "Waiting for storageclass"
while (( counter < storageclass_timeout ))
do
kubectl get storageclass openebs-hostpath &> /dev/null
if [ $? -eq 0 ] ; then
echo "Storageclass available"
storageclass_ready="y"
break
else
counter=$((counter + 15))
sleep 15
fi
done
[ -n "$storageclass_ready" ] || FATAL "Storageclass not ready after $storageclass_timeout seconds. Cannot install openebs"
kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#installs metallb from helm
function install_helm_metallb() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
echo "Installing MetalLB"
METALLB_VERSION="0.11.0"
METALLB_IP_RANGE="$DEFAULT_IP/32"
echo "configInline:
address-pools:
- name: default
protocol: layer2
addresses:
- $METALLB_IP_RANGE" | sudo tee -a ${OSM_DOCKER_WORK_DIR}/metallb-config.yaml
helm repo add metallb https://metallb.github.io/metallb
helm repo update
helm install --create-namespace --namespace metallb-system metallb metallb/metallb --version ${METALLB_VERSION} -f ${OSM_DOCKER_WORK_DIR}/metallb-config.yaml
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#checks openebs and metallb readiness
function check_for_readiness() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
# Default input values
sampling_period=2 # seconds
time_for_readiness=20 # seconds ready
time_for_failure=200 # seconds broken
OPENEBS_NAMESPACE=openebs
METALLB_NAMESPACE=metallb-system
# STACK_NAME=osm # By default, "osm"
# Equivalent number of samples
oks_threshold=$((time_for_readiness/${sampling_period})) # No. ok samples to declare the system ready
failures_threshold=$((time_for_failure/${sampling_period})) # No. nok samples to declare the system broken
failures_in_a_row=0
oks_in_a_row=0
####################################################################################
# Loop to check system readiness
####################################################################################
while [[ (${failures_in_a_row} -lt ${failures_threshold}) && (${oks_in_a_row} -lt ${oks_threshold}) ]]
do
# State of OpenEBS
OPENEBS_STATE=$(kubectl get pod -n ${OPENEBS_NAMESPACE} --no-headers 2>&1)
OPENEBS_READY=$(echo "${OPENEBS_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
OPENEBS_NOT_READY=$(echo "${OPENEBS_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
COUNT_OPENEBS_READY=$(echo "${OPENEBS_READY}"| grep -v -e '^$' | wc -l)
COUNT_OPENEBS_NOT_READY=$(echo "${OPENEBS_NOT_READY}" | grep -v -e '^$' | wc -l)
# State of MetalLB
METALLB_STATE=$(kubectl get pod -n ${METALLB_NAMESPACE} --no-headers 2>&1)
METALLB_READY=$(echo "${METALLB_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
METALLB_NOT_READY=$(echo "${METALLB_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
COUNT_METALLB_READY=$(echo "${METALLB_READY}" | grep -v -e '^$' | wc -l)
COUNT_METALLB_NOT_READY=$(echo "${METALLB_NOT_READY}" | grep -v -e '^$' | wc -l)
# OK sample
if [[ $((${COUNT_OPENEBS_NOT_READY}+${COUNT_METALLB_NOT_READY})) -eq 0 ]]
then
((++oks_in_a_row))
failures_in_a_row=0
echo -ne ===\> Successful checks: "${oks_in_a_row}"/${oks_threshold}\\r
# NOK sample
else
((++failures_in_a_row))
oks_in_a_row=0
echo
echo Bootstraping... "${failures_in_a_row}" checks of ${failures_threshold}
# Reports failed pods in OpenEBS
if [[ "${COUNT_OPENEBS_NOT_READY}" -ne 0 ]]
then
echo "OpenEBS: Waiting for ${COUNT_OPENEBS_NOT_READY} of $((${COUNT_OPENEBS_NOT_READY}+${COUNT_OPENEBS_READY})) pods to be ready:"
echo "${OPENEBS_NOT_READY}"
echo
fi
# Reports failed statefulsets
if [[ "${COUNT_METALLB_NOT_READY}" -ne 0 ]]
then
echo "MetalLB: Waiting for ${COUNT_METALLB_NOT_READY} of $((${COUNT_METALLB_NOT_READY}+${COUNT_METALLB_READY})) pods to be ready:"
echo "${METALLB_NOT_READY}"
echo
fi
fi
#------------ NEXT SAMPLE
sleep ${sampling_period}
done
####################################################################################
# OUTCOME
####################################################################################
if [[ (${failures_in_a_row} -ge ${failures_threshold}) ]]
then
echo
FATAL "K8S CLUSTER IS BROKEN"
else
echo
echo "K8S CLUSTER IS READY"
fi
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#removes osm deployments and services
function remove_k8s_namespace() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
kubectl delete ns $1
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
# main
while getopts ":D:d:i:-: " o; do
case "${o}" in
i)
DEFAULT_IP="${OPTARG}"
;;
d)
OSM_DOCKER_WORK_DIR="${OPTARG}"
;;
D)
OSM_DEVOPS="${OPTARG}"
;;
-)
[ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="y" && continue
echo -e "Invalid option: '--$OPTARG'\n" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument" >&2
exit 1
;;
\?)
echo -e "Invalid option: '-$OPTARG'\n" >&2
exit 1
;;
*)
exit 1
;;
esac
done
source $OSM_DEVOPS/common/logging
source $OSM_DEVOPS/common/track
echo "DEBUG_INSTALL=$DEBUG_INSTALL"
echo "DEFAULT_IP=$DEFAULT_IP"
echo "OSM_DEVOPS=$OSM_DEVOPS"
echo "OSM_DOCKER_WORK_DIR=$OSM_DOCKER_WORK_DIR"
echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
echo "HOME=$HOME"
install_kube
track install_k8s
init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
kube_config_dir
track init_k8s
if [ -n "$INSTALL_K8S_MONITOR" ]; then
# uninstall OSM MONITORING
uninstall_k8s_monitoring
track uninstall_k8s_monitoring
fi
#remove old namespace
remove_k8s_namespace osm
deploy_cni_provider
taint_master_node
install_helm
track install_helm
install_k8s_storageclass
track k8s_storageclass
install_helm_metallb
track k8s_metallb
check_for_readiness
track k8s_ready
#!/usr/bin/env bash
#
# 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 +eux
# MicroK8s installation
sudo snap install yq
sudo snap install microk8s --classic
sudo usermod -a -G microk8s ubuntu
newgrp microk8s
sudo microk8s.status --wait-ready
sudo microk8s.enable storage dns
# sudo microk8s.enable storage rbac
# sudo microk8s.enable storage helm
# sudo microk8s.enable storage helm3
# Enables MetalLB
PRIVATE_IP=$(hostname -I | awk '{print $1}')
echo ${PRIVATE_IP}
sudo microk8s.enable metallb:${PRIVATE_IP}-${PRIVATE_IP}
# Updates the certificate to allow connections from outside as well (i.e. to the "public" IP).
#sudo microk8s.stop
sudo sed -i "s/\#MOREIPS/IP.3 = ${NEW_K8S_IP}/g" /var/snap/microk8s/current/certs/csr.conf.template
cat /var/snap/microk8s/current/certs/csr.conf.template
#sudo microk8s.refresh-certs -i
#sudo microk8s.start
# Retrieves and saves the credentials
sudo microk8s.config | sed "s/server: .*/server: https:\/\/${NEW_K8S_IP}:16443/g" \
| tee ${HOME}/.kube/config
echo
echo Credentials saved at ${HOME}/.kube/config
echo
return 0
......@@ -90,7 +90,7 @@ add_repo() {
if [ $? -ne 0 ]
then
need_packages_lw="software-properties-common apt-transport-https"
echo -e "Checking required packages: $need_packages_lw"
echo -e "Checking required packages to add ETSI OSM debian repo: $need_packages_lw"
dpkg -l $need_packages_lw &>/dev/null \
|| ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
|| sudo apt-get -q update \
......@@ -102,7 +102,8 @@ add_repo() {
|| ! echo "failed to install $need_packages_lw" \
|| exit 1
wget -qO - $REPOSITORY_BASE/$RELEASE/OSM%20ETSI%20Release%20Key.gpg | sudo apt-key add -
sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y "$1" && sudo DEBIAN_FRONTEND=noninteractive apt-get update
sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y "$1" \
&& sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 DEBIAN_FRONTEND=noninteractive apt-get update
return 0
fi
......@@ -117,7 +118,24 @@ if [ $? -eq 0 ]; then
fi
}
while getopts ":b:r:c:n:k:u:R:l:L:K:p:D:o:O:m:N:H:S:s:w:t:U:P:A:d:p:f:F:-: hy" o; do
function configure_apt_proxy() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
OSM_APT_PROXY=$1
OSM_APT_PROXY_FILE="/etc/apt/apt.conf.d/osm-apt"
echo "Configuring apt proxy in file ${OSM_APT_PROXY_FILE}"
if [ ! -f ${OSM_APT_PROXY_FILE} ]; then
sudo bash -c "cat <<EOF > ${OSM_APT_PROXY}
Acquire::http { Proxy \"${OSM_APT_PROXY}\"; }
EOF"
else
sudo sed -i "s|Proxy.*|Proxy \"${OSM_APT_PROXY}\"; }|" ${OSM_APT_PROXY_FILE}
fi
sudo apt-get update || FATAL "Configured apt proxy, but couldn't run 'apt-get update'. Check ${OSM_APT_PROXY_FILE}"
track apt_proxy_configured
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
while getopts ":a:b:r:n:k:u:R:D:o:O:m:N:H:S:s:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o; do
case "${o}" in
D)
DEVOPS_PATH="${OPTARG}"
......
#!/bin/bash
#
# 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.
#
source ../common/track
RELEASE="ReleaseTEN"
OSM_DOCKER_TAG=latest
OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
track
track start
sleep 1
track start release $RELEASE
sleep 1
track start docker_tag $OSM_DOCKER_TAG none none
sleep 1
track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none
sleep 1
track my-event my-op my-value "My comment" "tag1,tag2"
sleep 1
track my-second-event op1 value1 "My comment1 on second event" none op2 value2 "My comment2 on second event" none
#!/bin/bash
#
# 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.
#
#removes osm deployments and services
function remove_k8s_namespace() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
kubectl delete ns $1
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function remove_volumes() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
k8_volume=$1
echo "Removing ${k8_volume}"
sudo rm -rf ${k8_volume}
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function remove_crontab_job() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
crontab -l | grep -v '${OSM_DEVOPS}/installers/update-juju-lxc-images' | crontab -
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
function uninstall_k8s_monitoring() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
# uninstall OSM monitoring
sudo $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#Uninstall osmclient
function uninstall_osmclient() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
sudo apt-get remove --purge -y python3-osmclient
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#Uninstall OSM: remove deployments and services
function uninstall_osm() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
echo -e "\nUninstalling OSM"
if [ -n "$INSTALL_K8S_MONITOR" ]; then
# uninstall OSM MONITORING
uninstall_k8s_monitoring
fi
remove_k8s_namespace $OSM_STACK_NAME
echo "Now osm docker images and volumes will be deleted"
# TODO: clean-up of images should take into account if other tags were used for specific modules
newgrp docker << EONG
for module in ro lcm keystone nbi mon pol pla osmclient; do
docker image rm ${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module}:${OSM_DOCKER_TAG}
done
EONG
sg docker -c "docker image rm ${DOCKER_REGISTRY_URL}${DOCKER_USER}/ng-ui:${OSM_DOCKER_TAG}"
OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
remove_volumes $OSM_NAMESPACE_VOL
echo "Removing $OSM_DOCKER_WORK_DIR"
sudo rm -rf $OSM_DOCKER_WORK_DIR
[ -z "$CONTROLLER_NAME" ] && sg lxd -c "juju kill-controller -t 0 -y $OSM_STACK_NAME"
remove_crontab_job
# Cleanup Openstack installer venv
if [ -d "$OPENSTACK_PYTHON_VENV" ]; then
rm -r $OPENSTACK_PYTHON_VENV
fi
[ -z "$INSTALL_NOHOSTCLIENT" ] && uninstall_osmclient
echo "Some docker images will be kept in case they are used by other docker stacks"
echo "To remove them, just run 'docker image prune' in a terminal"
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
return 0
}
function ask_user(){
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
# ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
# Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
# Return: true(0) if user type 'yes'; false (1) if user type 'no'
read -e -p "$1" USER_CONFIRMATION
while true ; do
[ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
[ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
[ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
[ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
done
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
LXD_VERSION=4.0
JUJU_VERSION=2.9
UNINSTALL=""
DEVELOP=""
UPDATE=""
RECONFIGURE=""
TEST_INSTALLER=""
INSTALL_LXD=""
SHOWOPTS=""
COMMIT_ID=""
ASSUME_YES=""
APT_PROXY_URL=""
INSTALL_FROM_SOURCE=""
DEBUG_INSTALL=""
RELEASE="ReleaseTEN"
REPOSITORY="stable"
INSTALL_VIMEMU=""
INSTALL_PLA=""
LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
LXD_REPOSITORY_PATH=""
INSTALL_LIGHTWEIGHT="y"
INSTALL_TO_OPENSTACK=""
OPENSTACK_OPENRC_FILE_OR_CLOUD=""
OPENSTACK_PUBLIC_NET_NAME=""
OPENSTACK_ATTACH_VOLUME="false"
OPENSTACK_SSH_KEY_FILE=""
OPENSTACK_USERDATA_FILE=""
OPENSTACK_VM_NAME="server-osm"
OPENSTACK_PYTHON_VENV="$HOME/.virtual-envs/osm"
INSTALL_ONLY=""
TO_REBUILD=""
INSTALL_NOLXD=""
INSTALL_NODOCKER=""
INSTALL_NOJUJU=""
INSTALL_K8S_MONITOR=""
INSTALL_NOHOSTCLIENT=""
INSTALL_CACHELXDIMAGES=""
OSM_DEVOPS=
OSM_VCA_HOST=
OSM_VCA_SECRET=
OSM_VCA_PUBKEY=
OSM_VCA_CLOUDNAME="localhost"
OSM_VCA_K8S_CLOUDNAME="k8scloud"
OSM_STACK_NAME=osm
NO_HOST_PORTS=""
DOCKER_NOBUILD=""
REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
OSM_WORK_DIR="/etc/osm"
OSM_DOCKER_WORK_DIR="/etc/osm/docker"
OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
OSM_HOST_VOL="/var/lib/osm"
OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
OSM_DOCKER_TAG=latest
DOCKER_USER=opensourcemano
PULL_IMAGES="y"
KAFKA_TAG=2.11-1.0.2
PROMETHEUS_TAG=v2.4.3
GRAFANA_TAG=latest
PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
PROMETHEUS_CADVISOR_TAG=latest
KEYSTONEDB_TAG=10
OSM_DATABASE_COMMONKEY=
ELASTIC_VERSION=6.4.2
ELASTIC_CURATOR_VERSION=5.5.4
POD_NETWORK_CIDR=10.244.0.0/16
K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
DOCKER_REGISTRY_URL=
DOCKER_PROXY_URL=
MODULE_DOCKER_TAG=
while getopts ":a:b:r:n:k:u:R:D:o:O:m:N:H:S:s:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o; do
case "${o}" in
a)
APT_PROXY_URL=${OPTARG}
;;
b)
COMMIT_ID=${OPTARG}
PULL_IMAGES=""
;;
r)
REPOSITORY="${OPTARG}"
REPO_ARGS+=(-r "$REPOSITORY")
;;
k)
REPOSITORY_KEY="${OPTARG}"
REPO_ARGS+=(-k "$REPOSITORY_KEY")
;;
u)
REPOSITORY_BASE="${OPTARG}"
REPO_ARGS+=(-u "$REPOSITORY_BASE")
;;
R)
RELEASE="${OPTARG}"
REPO_ARGS+=(-R "$RELEASE")
;;
D)
OSM_DEVOPS="${OPTARG}"
;;
o)
INSTALL_ONLY="y"
[ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
;;
O)
INSTALL_TO_OPENSTACK="y"
if [ -n "${OPTARG}" ]; then
OPENSTACK_OPENRC_FILE_OR_CLOUD="${OPTARG}"
else
echo -e "Invalid argument for -O : ' $OPTARG'\n" >&2
usage && exit 1
fi
;;
f)
OPENSTACK_SSH_KEY_FILE="${OPTARG}"
;;
F)
OPENSTACK_USERDATA_FILE="${OPTARG}"
;;
N)
OPENSTACK_PUBLIC_NET_NAME="${OPTARG}"
;;
m)
[ "${OPTARG}" == "NG-UI" ] && TO_REBUILD="$TO_REBUILD NG-UI" && continue
[ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
[ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
[ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
[ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
[ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
[ "${OPTARG}" == "PLA" ] && TO_REBUILD="$TO_REBUILD PLA" && continue
[ "${OPTARG}" == "osmclient" ] && TO_REBUILD="$TO_REBUILD osmclient" && continue
[ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
[ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
[ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
[ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
[ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
[ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
[ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
;;
H)
OSM_VCA_HOST="${OPTARG}"
;;
S)
OSM_VCA_SECRET="${OPTARG}"
;;
s)
OSM_STACK_NAME="${OPTARG}" && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
;;
t)
OSM_DOCKER_TAG="${OPTARG}"
REPO_ARGS+=(-t "$OSM_DOCKER_TAG")
;;
U)
DOCKER_USER="${OPTARG}"
;;
P)
OSM_VCA_PUBKEY=$(cat ${OPTARG})
;;
A)
OSM_VCA_APIPROXY="${OPTARG}"
;;
l)
LXD_CLOUD_FILE="${OPTARG}"
;;
L)
LXD_CRED_FILE="${OPTARG}"
;;
K)
CONTROLLER_NAME="${OPTARG}"
;;
d)
DOCKER_REGISTRY_URL="${OPTARG}"
;;
p)
DOCKER_PROXY_URL="${OPTARG}"
;;
T)
MODULE_DOCKER_TAG="${OPTARG}"
;;
-)
[ "${OPTARG}" == "help" ] && usage && exit 0
[ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
[ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="--debug" && continue
[ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
[ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
[ "${OPTARG}" == "update" ] && UPDATE="y" && continue
[ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
[ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
[ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
[ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
[ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
[ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
[ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
[ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="--nojuju" && continue
[ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
[ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
[ "${OPTARG}" == "pullimages" ] && continue
[ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
[ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue
[ "${OPTARG}" == "bundle" ] && continue
[ "${OPTARG}" == "k8s" ] && continue
[ "${OPTARG}" == "lxd" ] && continue
[ "${OPTARG}" == "lxd-cred" ] && continue
[ "${OPTARG}" == "microstack" ] && continue
[ "${OPTARG}" == "overlay" ] && continue
[ "${OPTARG}" == "only-vca" ] && continue
[ "${OPTARG}" == "vca" ] && continue
[ "${OPTARG}" == "ha" ] && continue
[ "${OPTARG}" == "tag" ] && continue
[ "${OPTARG}" == "registry" ] && continue
[ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
[ "${OPTARG}" == "volume" ] && OPENSTACK_ATTACH_VOLUME="true" && continue
[ "${OPTARG}" == "nocachelxdimages" ] && continue
[ "${OPTARG}" == "cachelxdimages" ] && INSTALL_CACHELXDIMAGES="--cachelxdimages" && continue
echo -e "Invalid option: '--$OPTARG'\n" >&2
usage && exit 1
;;
:)
echo "Option -$OPTARG requires an argument" >&2
usage && exit 1
;;
\?)
echo -e "Invalid option: '-$OPTARG'\n" >&2
usage && exit 1
;;
h)
usage && exit 0
;;
y)
ASSUME_YES="y"
;;
*)
usage && exit 1
;;
esac
done
source $OSM_DEVOPS/common/all_funcs
uninstall_osm
......@@ -67,6 +67,7 @@ node("${params.NODE}") {
string(name: 'GERRIT_REFSPEC', value: GERRIT_REFSPEC),
string(name: 'GERRIT_PATCHSET_REVISION', value: GERRIT_PATCHSET_REVISION),
string(name: 'INSTALLER', value: params.INSTALLER),
string(name: 'OPENSTACK_BASE_IMAGE', value: params.OPENSTACK_BASE_IMAGE),
string(name: 'PROJECT_URL_PREFIX', value: params.PROJECT_URL_PREFIX),
string(name: 'DOCKER_TAG', value: params.DOCKER_TAG),
booleanParam(name: 'TEST_INSTALL', value: params.TEST_INSTALL),
......
......@@ -116,6 +116,7 @@ def ci_pipeline(mdg,url_prefix,project,branch,refspec,revision,do_stage_3,artifa
def downstream_params_stage_3 = [
string(name: 'GERRIT_BRANCH', value: "${branch}"),
string(name: 'INSTALLER', value: "Default" ),
string(name: 'OPENSTACK_BASE_IMAGE', value: "ubuntu18.04" ),
string(name: 'UPSTREAM_JOB_NAME', value: "${JOB_NAME}" ),
string(name: 'UPSTREAM_JOB_NUMBER', value: "${BUILD_NUMBER}" ),
booleanParam(name: 'DO_STAGE_4', value: do_stage_4 )
......
......@@ -32,6 +32,7 @@ properties([
string(defaultValue: 'artifactory-osm', description: '', name: 'ARTIFACTORY_SERVER'),
string(defaultValue: 'osm-stage_4', description: '', name: 'DOWNSTREAM_STAGE_NAME'),
string(defaultValue: 'testing-daily', description: '', name: 'DOCKER_TAG'),
string(defaultValue: 'ubuntu18.04', description: '', name: 'OPENSTACK_BASE_IMAGE'),
booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_FAIL'),
booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_PASS'),
booleanParam(defaultValue: true, description: '', name: 'SAVE_ARTIFACTS_ON_SMOKE_SUCCESS'),
......@@ -360,7 +361,7 @@ node("${params.NODE}") {
output=sh(returnStdout: true, script: """#!/bin/sh -e
for line in `grep OS ~/hive/robot-systest.cfg | grep -v OS_CLOUD` ; do export \$line ; done
openstack server create --flavor osm.sanity \
--image ubuntu18.04 \
--image ${OPENSTACK_BASE_IMAGE} \
--key-name CICD \
--property build_url="${BUILD_URL}" \
--nic net-id=osm-ext \
......@@ -484,8 +485,7 @@ node("${params.NODE}") {
${release} -r unstable \
-d ${USERNAME}:${PASSWORD}@${INTERNAL_DOCKER_REGISTRY} \
-p ${INTERNAL_DOCKER_PROXY} \
-t ${container_name} \
--nocachelxdimages
-t ${container_name}
"""
}
prometheusHostname = IP_ADDRESS
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment