summaryrefslogtreecommitdiffstats
path: root/bash
diff options
context:
space:
mode:
authorPetr Ospalý <p.ospaly@partner.samsung.com>2019-01-02 15:52:24 +0100
committerPetr Ospalý <p.ospaly@partner.samsung.com>2019-01-02 15:53:32 +0100
commit8100123ec5b6915e6ed7589ed5d94aee9e81520c (patch)
tree516d123dd969ab1d9149cd528a7eeff2d587f68e /bash
parent6dfb646b2d57a6bc17979a7a20169930e4a2d473 (diff)
Add default onap cfg support
Issue-ID: OOM-1551 Change-Id: If91e00ba49af9b52eea6cabb7cfecc296d1ff596 Signed-off-by: Petr Ospalý <p.ospaly@partner.samsung.com>
Diffstat (limited to 'bash')
-rw-r--r--bash/tools/common-functions.sh110
1 files changed, 107 insertions, 3 deletions
diff --git a/bash/tools/common-functions.sh b/bash/tools/common-functions.sh
index ac05fe18..4ccb2069 100644
--- a/bash/tools/common-functions.sh
+++ b/bash/tools/common-functions.sh
@@ -15,18 +15,22 @@
# limitations under the License.
#
# COPYRIGHT NOTICE ENDS HERE
+
#
# this file contains shared variables and functions for the onap installer
#
+
# any script which needs this file can check this variable
# and it will know immediately if the functions and variables
# are loaded and usable
IS_COMMON_FUNCTIONS_SOURCED=YES
+
# setting of the path variables
if [ -z "$APROJECT_DIR" ] ; then
INCLUDE_PATH="${LOCAL_PATH}"/"${RELATIVE_PATH}"
APROJECT_DIR=$(readlink -f "$INCLUDE_PATH"/../..)
fi
+
RESOURCES_DIR="$APROJECT_DIR/resources"
BASH_SCRIPTS_DIR="$APROJECT_DIR/bash"
NEXUS_DATA="$RESOURCES_DIR/nexus_data"
@@ -36,11 +40,14 @@ GEN_CFG_PATH="$APROJECT_DIR/live/cfg"
GIT_REPOS="$RESOURCES_DIR/git-repo"
NGINX_HTTP_DIR="$RESOURCES_DIR/http"
RHEL_REPO="$RESOURCES_DIR/pkg/rhel"
+
PATH="${PATH}:/usr/local/bin:/usr/local/sbin"
export PATH
+
# just self-defense against locale
LANG=C
export LANG
+
# dns handling
SIMUL_HOSTS="gcr.io \
git.rancher.io \
@@ -57,10 +64,12 @@ registry.hub.docker.com \
git.onap.org \
repo1.maven.org \
repo.maven.apache.org"
+
# default credentials to the repository
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123
NEXUS_EMAIL=admin@onap.org
+
# this function is intended to unify the installer output
message() {
case "$1" in
@@ -85,6 +94,7 @@ message() {
return 0
}
export message
+
# if the environment variable DEBUG is set to DEBUG-ONAP ->
# -> this function will print its arguments
# otherwise nothing is done
@@ -92,10 +102,12 @@ debug() {
[ "$DEBUG" = DEBUG-ONAP ] && message debug "$@"
}
export debug
+
fail() {
message error "$@"
exit 1
}
+
retry() {
local n=1
local max=5
@@ -110,10 +122,12 @@ retry() {
fi
done
}
+
may_self_extract() {
# extract and untar to the current directory
sed '0,/^# PAYLOAD BELOW #$/d' "$0" | tar -xvpf - ;
}
+
update_hosts() {
if grep -q "^[^#]\+\s$SIMUL_HOSTS\s*\$" /etc/hosts ; then
message info "simulated domains already in /etc/hosts"
@@ -121,12 +135,14 @@ update_hosts() {
echo "$LOCAL_IP $SIMUL_HOSTS" >> /etc/hosts
message info "simulated domains added to /etc/hosts (please check it)"
fi
+
if grep -q "^[^#]\+\s$NEXUS_FQDN\s*\$" /etc/hosts ; then
message info "nexus FQDN already in /etc/hosts"
else
echo "$LOCAL_IP $NEXUS_FQDN" >> /etc/hosts
message info "Nexus FQDN added to /etc/hosts (please check it)"
fi
+
if grep -q "^[^#]\+\srepo.install-server\s*\$" /etc/hosts ; then
message info "custom repo FQDN already in /etc/hosts"
else
@@ -134,52 +150,64 @@ update_hosts() {
message info "Nexus FQDN added to /etc/hosts (please check it)"
fi
}
+
get_cfg_val() {
name="$1"
shift
ask="$@"
+
value=$(eval "echo \$${name}")
if [ -z "$value" ]; then
while [ -z "$value" ] ; do
printf "${ask}"
read -r $name
+
value=$(eval "echo \$${name}")
done
echo "${name}='${value}'" >> ./local_repo.conf
fi
}
+
get_configuration() {
if [ -f ./local_repo.conf ]; then
. ./local_repo.conf
fi
+
if [ -z "${NEXUS_FQDN}" ]; then
NEXUS_FQDN="nexus.$HOSTNAME"
echo "NEXUS_FQDN='${NEXUS_FQDN}'" >> ./local_repo.conf
fi
+
if [ -z "${ONAP_SCALE}" ]; then
ONAP_SCALE=full
echo "ONAP_SCALE='${ONAP_SCALE}'" >> ./local_repo.conf
fi
+
# nexus should be configured using those default entries
# if it was not put the correct inputs instead
if [ -z "${NPM_USERNAME}" ]; then
NPM_USERNAME="${NEXUS_USERNAME}"
echo "NPM_USERNAME='${NPM_USERNAME}'" >> ./local_repo.conf
fi
+
if [ -z "${NPM_PASSWORD}" ]; then
NPM_PASSWORD="${NEXUS_PASSWORD}"
echo "NPM_PASSWORD='${NPM_PASSWORD}'" >> ./local_repo.conf
fi
+
if [ -z "${NPM_EMAIL}" ]; then
NPM_EMAIL="$NEXUS_EMAIL"
echo "NPM_EMAIL='${NPM_EMAIL}'" >> ./local_repo.conf
fi
+
export NEXUS_FQDN
export ONAP_SCALE
export NPM_USERNAME
export NPM_PASSWORD
export NPM_EMAIL
+
NODE_USERNAME="root"
+
if [ -z "$LOCAL_IP" ] ; then
echo
echo "======= Mandatory configuration ======="
@@ -189,12 +217,16 @@ get_configuration() {
"\nDO NOT USE LOOPBACK! (for example: 10.0.0.1): "
fi
}
+
enable_local_repo() {
sed -r "s%PATH%file://$APROJECT_DIR/resources/pkg/rhel%" "$APROJECT_DIR/resources/pkg/rhel/onap.repo" > /etc/yum.repos.d/onap.repo
}
+
install_packages() {
os_id="$1"
+
message info "Installing packages"
+
case "$os_id" in
centos)
yum -y install "$APROJECT_DIR/resources/pkg/centos/*.rpm"
@@ -215,6 +247,7 @@ install_packages() {
;;
esac
}
+
install_files() {
message info "installation of external binaries"
for binary in kubectl helm rancher jq ; do
@@ -223,23 +256,31 @@ install_files() {
done
mkdir ~/.kube
}
+
setup_vnc_server() {
mkdir -p ~/.vnc ~/.icewm
echo "onap" | vncpasswd -f > ~/.vnc/passwd
chmod 0600 ~/.vnc/passwd
+
cat > ~/.vnc/xstartup <<EOF
#!/bin/sh
+
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec icewm-session
+
EOF
+
chmod +x ~/.vnc/xstartup
+
cat > ~/.icewm/menu <<EOF
prog Firefox firefox firefox
separator
+
EOF
vncserver
}
+
update_docker_cfg() {
if [ -f "/etc/docker/daemon.json" ]; then
jq '.dns += ["172.17.0.1"]' /etc/docker/daemon.json > /tmp/daemon.json
@@ -248,15 +289,20 @@ update_docker_cfg() {
echo '{"dns": ["172.17.0.1"]}' > /etc/docker/daemon.json
fi
}
+
create_root_CA() {
echo "** Generate certificates **"
openssl genrsa -out $CERTS_TARGET_PATH/rootCA.key 4096
+
echo "** Generate self signed ***"
openssl req -config $GEN_CFG_PATH/cacert.cnf -key $CERTS_TARGET_PATH/rootCA.key -new -x509 -days 7300 -sha256 -extensions v3_ca \
-out $CERTS_TARGET_PATH/rootCAcert.pem
+
+
# convert to crt
openssl x509 -in $CERTS_TARGET_PATH/rootCAcert.pem -inform PEM -out $CERTS_TARGET_PATH/rootCAcert.crt
}
+
install_root_CA() {
os=$1
echo "** Publishing root CA **"
@@ -273,14 +319,19 @@ install_root_CA() {
echo "OS \"$os\" is not supported"
exit -2
fi
+
echo "** Restart docker (because of reload new CA) **"
systemctl restart docker
+
}
+
create_cert() {
server_name=$1
+
openssl genrsa -out $CERTS_TARGET_PATH/${server_name}_server.key 4096
echo "** Generate sig request ***"
openssl req -new -config $GEN_CFG_PATH/${server_name}_cert.cnf -key $CERTS_TARGET_PATH/${server_name}_server.key -out $CERTS_TARGET_PATH/${server_name}_server.csr
+
# v3.ext must be in separate file , because of bug in openssl 1.0
echo "** sign **"
openssl x509 -req -in $CERTS_TARGET_PATH/${server_name}_server.csr\
@@ -289,13 +340,21 @@ create_cert() {
-CAkey $CERTS_TARGET_PATH/rootCA.key\
-CAcreateserial -out $CERTS_TARGET_PATH/${server_name}_server.crt -days 3650 -sha256
}
+
create_all_certs() {
create_cert "nexus"
}
+
update_firewall() {
-#TODO
+# TODO
+#firewall-cmd --permanent --add-port=53/udp
+#firewall-cmd --permanent --add-port=53/tcp
+#firewall-cmd --permanent --add-port=10001/tcp
+#firewall-cmd --permanent --add-port=80/tcp
+#firewall-cmd --permanent --add-port=443/tcp
return 0
}
+
distribute_root_CA() {
targetip=$1
scp $APROJECT_DIR/install_cacert.sh $targetip:.
@@ -303,6 +362,18 @@ distribute_root_CA() {
echo "** Add DNS record to remote host **"
ssh $targetip "echo nameserver $LOCAL_IP > /etc/resolv.conf"
}
+
+upload_ansible_pkgs() {
+ os=$1
+ targetip=$2
+ #if [[ $os == "ubuntu" ]]; then
+ # those deb & whl packages are needed for sdnc-ansible-server pod
+ # independently on host OS distros
+ echo "** Copy required packages for sdnc-ansible-pod to kubernetes node $targetip **"
+ scp -r $APROJECT_DIR/resources/pkg/ubuntu/ansible_pkg $targetip:.
+ #fi
+}
+
remote_setup_nfs_server() {
os=$1
targetip=$2
@@ -312,8 +383,10 @@ remote_setup_nfs_server() {
scp -r $APROJECT_DIR/resources/pkg/ubuntu/nfs-common-pkg/* $targetip:.
ssh $targetip dpkg -i *.deb
fi
+
ssh $targetip /bin/bash ./setup_nfs_server.sh "$@"
}
+
remote_setup_nfs_mount() {
os=$1
targetip=$2
@@ -325,10 +398,12 @@ remote_setup_nfs_mount() {
fi
ssh $targetip /bin/bash ./setup_nfs_mount.sh $nfsip
}
+
enable_remote_repo() {
targetip=$1
sed -r "s%PATH%http://repo.install-server%" $APROJECT_DIR/resources/pkg/rhel/onap.repo | ssh $targetip 'cat > /etc/yum.repos.d/onap.repo'
}
+
install_remote_docker() {
targetip=$1
os=$2
@@ -346,8 +421,10 @@ install_remote_docker() {
else
echo {'\"'dns'\"': ['\"'$LOCAL_IP'\"']} > /etc/docker/daemon.json
fi"
+
ssh $targetip 'systemctl enable docker; systemctl restart docker'
}
+
deploy_rancher() {
docker run -d --entrypoint "/bin/bash" --restart=unless-stopped -p 8080:8080 \
-v $CERTS_TARGET_PATH:/usr/local/share/ca-certificates/extra:ro \
@@ -355,6 +432,7 @@ deploy_rancher() {
-c "/usr/sbin/update-ca-certificates;/usr/bin/entry /usr/bin/s6-svscan /service"
echo "** wait until rancher is ready **"
}
+
deploy_kubernetes() {
os=$1
set +e
@@ -375,13 +453,16 @@ deploy_kubernetes() {
export RANCHER_URL=http://${LOCAL_IP}:8080
export RANCHER_ACCESS_KEY=$KEY_PUBLIC
export RANCHER_SECRET_KEY=$KEY_SECRET
+
rancher env ls
echo "wait 60 sec for rancher environments can settle before we create the onap kubernetes one"
sleep 60
+
rancher env create -t kubernetes onap > kube_env_id.json
PROJECT_ID=$(<kube_env_id.json)
echo "env id: $PROJECT_ID"
export RANCHER_HOST_URL=http://${LOCAL_IP}:8080/v1/projects/$PROJECT_ID
+
for i in `seq 5`; do
status=$(rancher env ls | grep $PROJECT_ID | awk '{print $4}')
if [[ "$status" == "active" ]]; then
@@ -392,6 +473,7 @@ deploy_kubernetes() {
echo "Wait for environment to become active"
sleep 30
done
+
REG_URL_RESPONSE=`curl -X POST -u $KEY_PUBLIC:$KEY_SECRET -H 'Accept: application/json' -H 'ContentType: application/json' -d '{"name":"$LOCAL_IP"}' "http://$LOCAL_IP:8080/v1/projects/$PROJECT_ID/registrationtokens"`
echo "wait for server to finish url configuration - 3 min"
sleep 180
@@ -399,6 +481,7 @@ deploy_kubernetes() {
REGISTRATION_TOKENS=`curl http://127.0.0.1:8080/v2-beta/registrationtokens`
REGISTRATION_DOCKER=`echo $REGISTRATION_TOKENS | jq -r .data[0].image`
REGISTRATION_TOKEN=`echo $REGISTRATION_TOKENS | jq -r .data[0].token`
+
# base64 encode the kubectl token from the auth pair
# generate this after the host is registered
KUBECTL_TOKEN=$(echo -n 'Basic '$(echo -n "$RANCHER_ACCESS_KEY:$RANCHER_SECRET_KEY" | base64 -w 0) | base64 -w 0)
@@ -422,12 +505,15 @@ users:
- name: "onap"
user:
token: "$KUBECTL_TOKEN"
+
EOF
+
if [[ $os == "rhel" ]]; then
echo "Upgrade datavolume for RHEL"
KUBELET_ID=`curl http://${LOCAL_IP}:8080/v2-beta/projects/${PROJECT_ID}/services/ | jq -r '.data[] | select(.name=="kubelet")'.id`
OLD_LAUNCH_CONFIG=`curl http://${LOCAL_IP}:8080/v2-beta/projects/${PROJECT_ID}/services/${KUBELET_ID} | jq '.launchConfig'`
NEW_LAUNCH_CONFIG=`echo $OLD_LAUNCH_CONFIG | jq '.dataVolumes[2]="/sys/fs/cgroup:/sys/fs/cgroup:ro,rprivate"'`
+
DATA="{
\"inServiceStrategy\": {
\"batchSize\": 1,
@@ -438,11 +524,14 @@ EOF
}
}"
curl -s -u $KEY_PUBLIC:$KEY_SECRET -X POST -H 'Content-Type: application/json' -d "${DATA}" "http://${LOCAL_IP}:8080/v2-beta/projects/${PROJECT_ID}/services/${KUBELET_ID}?action=upgrade" > /dev/null
+
echo "Give environment time to update (30 sec)"
sleep 30
+
curl -s -u $KEY_PUBLIC:$KEY_SECRET -X POST "http://${LOCAL_IP}:8080/v2-beta/projects/${PROJECT_ID}/services/${KUBELET_ID}?action=finishupgrade" > /dev/null
fi
}
+
deploy_rancher_agent() {
nodeip=$1
if [ -z "$REGISTRATION_DOCKER" ]; then
@@ -457,10 +546,12 @@ deploy_rancher_agent() {
echo "ASSERT: Missing REGISTRATION_TOKEN"
exit 1
fi
+
ssh $nodeip "docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/racher:/var/lib/rancher $REGISTRATION_DOCKER $RANCHER_URL/v1/scripts/$REGISTRATION_TOKEN"
echo "waiting 2 min for creating kubernetes environment"
sleep 120
}
+
deploy_node() {
nodeip=$1
os=$2
@@ -469,6 +560,7 @@ deploy_node() {
install_remote_docker $nodeip $os
deploy_rancher_agent $nodeip
}
+
deploy_onap() {
pushd $APROJECT_DIR/resources/oom/kubernetes
helm init --upgrade --skip-refresh
@@ -486,6 +578,7 @@ deploy_onap() {
--set "global.cacert=$(cat ${CERTS_TARGET_PATH}/rootCAcert.crt)"
popd
}
+
expand_file() {
file=$1
# print warning if patched file does not exist as some charts
@@ -494,12 +587,15 @@ expand_file() {
echo "WARNING: Can't patch file $file because this file does not exists."
return 0
fi
+
shift
+
for ivar in "$@" ; do
ivalue=$(eval 'echo "$'${ivar}'"')
sed -i "s#${ivar}#${ivalue}#g" "$file"
done
}
+
patch_npm_oom() {
if [ -z "$LOCAL_IP" ] ; then
echo "ERROR: LOCAL_IP unset"
@@ -509,8 +605,10 @@ patch_npm_oom() {
echo "ERROR: NEXUS_FQDN unset"
return 1
fi
+
UPDATE_HOSTS_FILE="$LOCAL_IP $NEXUS_FQDN"
UPDATE_NPM_REGISTRY="npm set registry \"http://${NEXUS_FQDN}/repository/npm-private/\""
+
expand_file $APROJECT_DIR/resources/oom/kubernetes/common/dgbuilder/templates/deployment.yaml \
UPDATE_HOSTS_FILE \
UPDATE_NPM_REGISTRY
@@ -518,18 +616,22 @@ patch_npm_oom() {
UPDATE_HOSTS_FILE \
UPDATE_NPM_REGISTRY
}
+
patch_spring_oom() {
if [ -z "$LOCAL_IP" ] ; then
echo "ERROR: LOCAL_IP unset"
return 1
fi
+
UPDATE_HOSTS_FILE="$LOCAL_IP www.springframework.org"
expand_file $APROJECT_DIR/resources/oom/kubernetes/dmaap/charts/message-router/templates/deployment.yaml \
UPDATE_HOSTS_FILE
}
+
patch_cfy_manager_depl() {
os="$1"
file="${APROJECT_DIR}/resources/oom/kubernetes/dcaegen2/charts/dcae-cloudify-manager/templates/deployment.yaml"
+
case "$os" in
centos|rhel)
CERT_PATH="/etc/pki/ca-trust/source/anchors"
@@ -546,9 +648,11 @@ patch_cfy_manager_depl() {
return 1
;;
esac
+
expand_file "$file" CERT_PATH
}
+
copy_onap_values_file() {
- cp "${APROJECT_DIR}/cfg/${ONAP_SCALE}_depl_values.yaml" \
+ cp "${APROJECT_DIR}/${CUSTOM_CFG_RELPATH:-cfg}/${ONAP_SCALE}_depl_values.yaml" \
"${APROJECT_DIR}/resources/oom/kubernetes/onap/values.yaml"
-} \ No newline at end of file
+}