# set -eux
-JUJU_AGENT_VERSION=2.8.6
+JUJU_AGENT_VERSION=2.8.9
K8S_CLOUD_NAME="k8s-cloud"
KUBECTL="microk8s.kubectl"
MICROK8S_VERSION=1.19
+OSMCLIENT_VERSION=9.0
IMAGES_OVERLAY_FILE=~/.osm/images-overlay.yaml
PATH=/snap/bin:${PATH}
MODEL_NAME=osm
-OSM_BUNDLE=cs:osm-54
-OSM_HA_BUNDLE=cs:osm-ha-40
+OSM_BUNDLE=cs:osm-66
+OSM_HA_BUNDLE=cs:osm-ha-51
+TAG=testing-daily
function check_arguments(){
while [ $# -gt 0 ] ; do
case $1 in
--bundle) BUNDLE="$2" ;;
+ --overlay) OVERLAY="$2" ;;
--k8s) KUBECFG="$2" ;;
--vca) CONTROLLER="$2" ;;
--lxd) LXD_CLOUD="$2" ;;
--ha) BUNDLE=$OSM_HA_BUNDLE ;;
--tag) TAG="$2" ;;
--registry) REGISTRY_INFO="$2" ;;
+ --only-vca) ONLY_VCA=y ;;
esac
shift
done
function install_snaps(){
if [ ! -v KUBECFG ]; then
sudo snap install microk8s --classic --channel=${MICROK8S_VERSION}/stable
+ sudo cat /var/snap/microk8s/current/args/kube-apiserver | grep advertise-address || (
+ echo "--advertise-address $DEFAULT_IP" | sudo tee -a /var/snap/microk8s/current/args/kube-apiserver
+ microk8s.stop
+ microk8s.start
+ )
sudo usermod -a -G microk8s `whoami`
mkdir -p ~/.kube
sudo chown -f -R `whoami` ~/.kube
KUBEGRP="microk8s"
sg ${KUBEGRP} -c "microk8s status --wait-ready"
KUBECONFIG=~/.osm/microk8s-config.yaml
- sg ${KUBEGRP} -c "microk8s config" > ${KUBECONFIG}
+ sg ${KUBEGRP} -c "microk8s config" | tee ${KUBECONFIG}
else
KUBECTL="kubectl"
sudo snap install kubectl --classic
esac
fi
- create_overlay
echo "Creating OSM model"
if [ -v KUBECFG ]; then
juju add-model $MODEL_NAME $K8S_CLOUD_NAME
fi
[ -v TAG ] && generate_images_overlay && images_overlay="--overlay $IMAGES_OVERLAY_FILE"
+ if [ -v OVERLAY ]; then
+ extra_overlay="--overlay $OVERLAY"
+ fi
+
if [ -v BUNDLE ]; then
- juju deploy -m $MODEL_NAME $BUNDLE --overlay ~/.osm/vca-overlay.yaml $images_overlay
+ juju deploy -m $MODEL_NAME $BUNDLE --overlay ~/.osm/vca-overlay.yaml $images_overlay $extra_overlay
else
- juju deploy -m $MODEL_NAME $OSM_BUNDLE --overlay ~/.osm/vca-overlay.yaml $images_overlay
+ juju deploy -m $MODEL_NAME $OSM_BUNDLE --overlay ~/.osm/vca-overlay.yaml $images_overlay $extra_overlay
fi
- echo "Waiting for deployment to finish..."
- check_osm_deployed
- echo "OSM with charms deployed"
if [ ! -v KUBECFG ]; then
API_SERVER=${DEFAULT_IP}
else
hostport="$(echo ${url/$user@/} | cut -d/ -f1)"
API_SERVER="$(echo $hostport | sed -e 's,:.*,,g')"
fi
-
# Expose OSM services
- # Expose NBI
- juju config -m $MODEL_NAME nbi site_url=https://nbi.${API_SERVER}.xip.io
- juju config -m $MODEL_NAME ng-ui site_url=https://ui.${API_SERVER}.xip.io
-
- # Expose Grafana
- juju config -m $MODEL_NAME grafana-k8s juju-external-hostname=grafana.${API_SERVER}.xip.io
- juju expose -m $MODEL_NAME grafana-k8s
- wait_for_port grafana-k8s 0
-
- # Expose Prometheus
- juju config -m $MODEL_NAME prometheus-k8s juju-external-hostname=prometheus.${API_SERVER}.xip.io
- juju expose -m $MODEL_NAME prometheus-k8s
- wait_for_port prometheus-k8s 1
-
- # Apply annotations
- sg ${KUBEGRP} -c "${KUBECTL} annotate ingresses.networking nginx.ingress.kubernetes.io/proxy-body-size=0 -n osm -l juju-app=ng-ui"
+ juju config -m $MODEL_NAME nbi site_url=https://nbi.${API_SERVER}.nip.io
+ juju config -m $MODEL_NAME ng-ui site_url=https://ui.${API_SERVER}.nip.io
+ juju config -m $MODEL_NAME grafana site_url=https://grafana.${API_SERVER}.nip.io
+ juju config -m $MODEL_NAME prometheus site_url=https://prometheus.${API_SERVER}.nip.io
+
+ echo "Waiting for deployment to finish..."
+ check_osm_deployed
+ echo "OSM with charms deployed"
}
function check_osm_deployed() {
sudo snap install jq
sudo snap install yq
local HOME=/home/$USER
- local vca_user=$(cat $HOME/.local/share/juju/accounts.yaml | yq r - controllers.$CONTROLLER_NAME.user)
- local vca_password=$(cat $HOME/.local/share/juju/accounts.yaml | yq r - controllers.$CONTROLLER_NAME.password)
- local vca_host=$(cat $HOME/.local/share/juju/controllers.yaml | yq r - controllers.$CONTROLLER_NAME.api-endpoints[0] | cut -d ":" -f 1)
- local vca_port=$(cat $HOME/.local/share/juju/controllers.yaml | yq r - controllers.$CONTROLLER_NAME.api-endpoints[0] | cut -d ":" -f 2)
+ local vca_user=$(cat $HOME/.local/share/juju/accounts.yaml | yq e .controllers.$CONTROLLER_NAME.user - )
+ local vca_secret=$(cat $HOME/.local/share/juju/accounts.yaml | yq e .controllers.$CONTROLLER_NAME.password - )
+ local vca_host=$(cat $HOME/.local/share/juju/controllers.yaml | yq e .controllers.$CONTROLLER_NAME.api-endpoints[0] - | cut -d ":" -f 1)
+ local vca_port=$(cat $HOME/.local/share/juju/controllers.yaml | yq e .controllers.$CONTROLLER_NAME.api-endpoints[0] - | cut -d ":" -f 2)
local vca_pubkey=\"$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)\"
local vca_cloud="lxd-cloud"
# Get the VCA Certificate
- local vca_cacert=$(cat $HOME/.local/share/juju/controllers.yaml | yq r - controllers.$CONTROLLER_NAME.ca-cert | base64 | tr -d \\n)
+ local vca_cacert=$(cat $HOME/.local/share/juju/controllers.yaml | yq e .controllers.$CONTROLLER_NAME.ca-cert - | base64 | tr -d \\n)
# Calculate the default route of this machine
local DEFAULT_IF=`ip route list match 0.0.0.0 | awk '{print $5}'`
# Generate a new overlay.yaml, overriding any existing one
cat << EOF > /tmp/vca-overlay.yaml
applications:
- lcm-k8s:
+ lcm:
options:
vca_user: $vca_user
- vca_password: $vca_password
+ vca_secret: $vca_secret
vca_host: $vca_host
vca_port: $vca_port
vca_pubkey: $vca_pubkey
vca_cacert: $vca_cacert
vca_cloud: $vca_cloud
vca_k8s_cloud: $K8S_CLOUD_NAME
- mon-k8s:
+ mon:
options:
vca_user: $vca_user
- vca_password: $vca_password
+ vca_secret: $vca_secret
vca_host: $vca_host
vca_cacert: $vca_cacert
EOF
}
function generate_images_overlay(){
- cat << EOF > /tmp/nbi_registry.yaml
-registrypath: ${REGISTRY_URL}opensourcemano/nbi:$TAG
-EOF
- cat << EOF > /tmp/ng_ui_registry.yaml
-registrypath: ${REGISTRY_URL}opensourcemano/ng-ui:$TAG
-EOF
- if [ ! -z "$REGISTRY_USERNAME" ] ; then
- REGISTRY_CREDENTIALS=$(cat <<EOF
+ echo "applications:" > /tmp/images-overlay.yaml
- image_username: $REGISTRY_USERNAME
- image_password: $REGISTRY_PASSWORD
+ charms_with_resources="nbi lcm mon pol ng-ui ro pla keystone"
+ for charm in $charms_with_resources; do
+ cat << EOF > /tmp/${charm}_registry.yaml
+registrypath: ${REGISTRY_URL}opensourcemano/${charm}:$TAG
EOF
- );
- echo username: $REGISTRY_USERNAME >> /tmp/nbi_registry.yaml
- echo password: $REGISTRY_PASSWORD >> /tmp/nbi_registry.yaml
- echo username: $REGISTRY_USERNAME >> /tmp/ng_ui_registry.yaml
- echo password: $REGISTRY_PASSWORD >> /tmp/ng_ui_registry.yaml
-fi
+ if [ ! -z "$REGISTRY_USERNAME" ] ; then
+ echo username: $REGISTRY_USERNAME >> /tmp/${charm}_registry.yaml
+ echo password: $REGISTRY_PASSWORD >> /tmp/${charm}_registry.yaml
+ fi
- cat << EOF > /tmp/images-overlay.yaml
-applications:
- lcm-k8s:
- options:
- image: ${REGISTRY_URL}opensourcemano/lcm:$TAG ${REGISTRY_CREDENTIALS}
- mon-k8s:
- options:
- image: ${REGISTRY_URL}opensourcemano/mon:$TAG ${REGISTRY_CREDENTIALS}
- ro-k8s:
- options:
- image: ${REGISTRY_URL}opensourcemano/ro:$TAG ${REGISTRY_CREDENTIALS}
- nbi:
- resources:
- image: /tmp/nbi_registry.yaml
- pol-k8s:
- options:
- image: ${REGISTRY_URL}opensourcemano/pol:$TAG ${REGISTRY_CREDENTIALS}
- pla:
- options:
- image: ${REGISTRY_URL}opensourcemano/pla:$TAG ${REGISTRY_CREDENTIALS}
- ng-ui:
+ cat << EOF >> /tmp/images-overlay.yaml
+ ${charm}:
resources:
- image: /tmp/ng_ui_registry.yaml
- keystone:
- options:
- image: ${REGISTRY_URL}opensourcemano/keystone:$TAG ${REGISTRY_CREDENTIALS}
+ image: /tmp/${charm}_registry.yaml
+
EOF
+ done
+
mv /tmp/images-overlay.yaml $IMAGES_OVERLAY_FILE
}
+function refresh_osmclient_snap() {
+ osmclient_snap_install_refresh refresh
+}
+
+function install_osm_client_snap() {
+ osmclient_snap_install_refresh install
+}
+
+function osmclient_snap_install_refresh() {
+ channel_preference="stable candidate beta edge"
+ for channel in $channel_preference; do
+ echo "Trying to install osmclient from channel $OSMCLIENT_VERSION/$channel"
+ sudo snap $1 osmclient --channel $OSMCLIENT_VERSION/$channel 2> /dev/null && echo osmclient snap installed && break
+ done
+}
function install_osmclient() {
- sudo snap install osmclient
- sudo snap alias osmclient.osm osm
+ snap info osmclient | grep -E ^installed: && refresh_osmclient_snap || install_osm_client_snap
}
function add_local_k8scluster() {
ubuntu1604
ssh-keygen -t rsa -N "" -f ~/.ssh/microstack
microstack.openstack keypair create --public-key ~/.ssh/microstack.pub microstack
- export OSM_HOSTNAME=`juju status --format json | jq -rc '.applications."nbi".address'`
+ export OSM_HOSTNAME=`juju status -m $MODEL_NAME --format json | jq -rc '.applications."nbi".address'`
osm vim-create --name microstack-site \
--user admin \
--password keystone \
mkdir -p ~/.osm
install_snaps
bootstrap_k8s_lxd
-deploy_charmed_osm
-install_osmclient
-OSM_HOSTNAME=$(juju config nbi site_url | sed "s/http.*\?:\/\///"):443
-add_local_k8scluster
+create_overlay
+if [ -v ONLY_VCA ]; then
+ HOME=/home/$USER
+ vca_user=$(cat $HOME/.local/share/juju/accounts.yaml | yq e .controllers.$CONTROLLER_NAME.user - )
+ vca_secret=$(cat $HOME/.local/share/juju/accounts.yaml | yq e .controllers.$CONTROLLER_NAME.password - )
+ vca_host=$(cat $HOME/.local/share/juju/controllers.yaml | yq e .controllers.$CONTROLLER_NAME.api-endpoints[0] - | cut -d ":" -f 1)
+ vca_port=$(cat $HOME/.local/share/juju/controllers.yaml | yq e .controllers.$CONTROLLER_NAME.api-endpoints[0] - | cut -d ":" -f 2)
+ vca_pubkey=\"$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)\"
+ vca_cloud="lxd-cloud"
+ vca_cacert=$(cat $HOME/.local/share/juju/controllers.yaml | yq e .controllers.$CONTROLLER_NAME.ca-cert - | base64 | tr -d \\n)
+ hostname=`cat /etc/hostname`
+
+ echo "Use the following command to register the installed VCA to your OSM:"
+ echo -e " osm vca-add --endpoints $vca_host:$vca_port \ \n --user $vca_user \ \n --secret $vca_secret \ \n --cacert $vca_cacert \ \n --lxd-cloud lxd-cloud \ \n --lxd-credentials lxd-cloud \ \n --k8s-cloud microk8s \ \n --k8s-credentials microk8s\ \n $hostname-vca"
+else
+ deploy_charmed_osm
+ install_osmclient
+ export OSM_HOSTNAME=$(juju config -m $MODEL_NAME nbi site_url | sed "s/http.*\?:\/\///"):443
+ sleep 10
+ add_local_k8scluster
+ if [ -v MICROSTACK ]; then
+ install_microstack
+ fi
-if [ -v MICROSTACK ]; then
- install_microstack
+ echo "Your installation is now complete, follow these steps for configuring the osmclient:"
+ echo
+ echo "1. Create the OSM_HOSTNAME environment variable with the NBI IP"
+ echo
+ echo "export OSM_HOSTNAME=$OSM_HOSTNAME"
+ echo
+ echo "2. Add the previous command to your .bashrc for other Shell sessions"
+ echo
+ echo "echo \"export OSM_HOSTNAME=$OSM_HOSTNAME\" >> ~/.bashrc"
+ echo
+ echo "DONE"
fi
-
-echo "Your installation is now complete, follow these steps for configuring the osmclient:"
-echo
-echo "1. Create the OSM_HOSTNAME environment variable with the NBI IP"
-echo
-echo "export OSM_HOSTNAME=$OSM_HOSTNAME"
-echo
-echo "2. Add the previous command to your .bashrc for other Shell sessions"
-echo
-echo "echo \"export OSM_HOSTNAME=$OSM_HOSTNAME\" >> ~/.bashrc"
-echo
-echo "DONE"