##
-# Copyright 2019 ETSI
+# Copyright 2019-2020 ETSI
#
# 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
########################################################################
version: '3'
-volumes:
- ro:
- ro_db:
- mongo_db:
- mon_db:
- pol_db:
- osm_packages:
- prom_db:
networks:
netOSM:
external:
#driver_opts:
# com.docker.network.driver.mtu: "1446"
services:
- zookeeper:
- image: wurstmeister/zookeeper:${ZOOKEEPER_TAG:-latest}
-# ports:
-# - "2181:2181"
- networks:
- - netOSM
- healthcheck:
- test: echo stat | nc localhost 2181
- interval: 10s
- timeout: 10s
- retries: 3
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
- kafka:
- image: wurstmeister/kafka:${KAFKA_TAG:-latest}
- ports:
- - "9092"
- networks:
- - netOSM
- environment:
- KAFKA_ADVERTISED_HOST_NAME: kafka
- KAFKA_ADVERTISED_PORT: 9092
- KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
- KAFKA_LOG_RETENTION_HOURS: 24
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock
- healthcheck:
- test: zookeeper-shell.sh zookeeper:2181 ls /brokers/ids 2>&1 | grep "Node does not exist" && exit 1 || exit 0
- interval: 20s
- timeout: 10s
- retries: 5
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
- #depends_on:
- # - zookeeper
- mongo:
- image: mongo
-# ports:
-# - "27017:27017"
- networks:
- - netOSM
- volumes:
- - mongo_db:/data/db
- prometheus:
- image: prom/prometheus:${PROMETHEUS_TAG:-latest}
- hostname: prometheus
- ports:
- - "${OSM_PROM_PORTS:-9091:9090}"
- volumes:
- - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- - prom_db:/prometheus
- networks:
- - netOSM
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
- prometheus-cadvisor:
- image: google/cadvisor:${PROMETHEUS_CADVISOR_TAG:-latest}
- ports:
- - "${OSM_PROM_CADVISOR_PORTS:-8080:8080}"
- volumes:
- - /:/rootfs:ro
- - /var/run:/var/run:ro
- - /sys:/sys:ro
- - /var/lib/docker/:/var/lib/docker:ro
- - /dev/disk/:/dev/disk:ro
- networks:
- - netOSM
- keystone:
- image: ${DOCKER_USER:-opensourcemano}/keystone:${TAG:-8}
- networks:
- - netOSM
- environment:
- DB_HOST: mysql
- env_file:
- - ./keystone.env
- ports:
- - "${OSM_KEYSTONE_PORTS:-5000:5000}"
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
- nbi:
- image: ${DOCKER_USER:-opensourcemano}/nbi:${TAG:-8}
- networks:
- - netOSM
- volumes:
- - osm_packages:/app/storage
- environment:
- OSMNBI_DATABASE_HOST: mongo
- OSMNBI_MESSAGE_HOST: kafka
- env_file:
- - ./nbi.env
- ports:
- - "${OSM_NBI_PORTS:-9999:9999}"
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
- #depends_on:
- # - kafka
- # - mongo
- lcm:
- image: ${DOCKER_USER:-opensourcemano}/lcm:${TAG:-8}
- networks:
- - netOSM
- volumes:
- - osm_packages:/app/storage
- environment:
- OSMLCM_RO_HOST: ro
- OSMLCM_DATABASE_HOST: mongo
- OSMLCM_MESSAGE_HOST: kafka
- env_file:
- - ./lcm.env
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
- #depends_on:
- # - kafka
- # - mongo
- # - ro
- mysql:
- image: mysql:5
- networks:
- netOSM:
- aliases:
- - ro-db
- volumes:
- - ro_db:/var/lib/mysql
- env_file:
- - ./ro-db.env
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
-# ports:
-# - "3306:3306"
- ro:
- image: ${DOCKER_USER:-opensourcemano}/ro:${TAG:-8}
- networks:
- - netOSM
- environment:
- RO_DB_HOST: mysql
- env_file:
- - ./ro.env
- #depends_on:
- # - mysql
- volumes:
- - ro:/var/log/osm
- ports:
- - "${OSM_RO_PORTS:-9090:9090}"
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
- mon:
- image: ${DOCKER_USER:-opensourcemano}/mon:${TAG:-8}
- networks:
- - netOSM
- volumes:
- - mon_db:/app/database
- environment:
- OSMMON_MESSAGE_HOST: kafka
- OSMMON_MESSAGE_PORT: 9092
- env_file:
- - ./mon.env
- ports:
- - "${OSM_MON_PORTS:-8662:8662}"
- #depends_on:
- # - kafka
- logging:
- driver: "json-file"
- options:
- max-file: 5
- max-size: 10m
- pol:
- image: ${DOCKER_USER:-opensourcemano}/pol:${TAG:-8}
- networks:
- - netOSM
- volumes:
- - pol_db:/app/database
- environment:
- OSMPOL_MESSAGE_HOST: kafka
- OSMPOL_MESSAGE_PORT: 9092
- env_file:
- - ./pol.env
- #depends_on:
- # - kafka
- # - mon
- logging:
- driver: "json-file"
- options:
- max-file: 5
- max-size: 10m
ng-ui:
image: ${DOCKER_USER:-opensourcemano}/ng-ui:${TAG:-8}
networks:
- netOSM
- #depends_on:
- # - nbi
ports:
- "${OSM_UI_PORTS:-80:80}"
logging:
options:
max-size: "100m"
max-file: "2"
- grafana:
- image: grafana/grafana
- volumes:
- - ./files/dashboards-osm.yml:/etc/grafana/provisioning/dashboards/dashboards-osm.yml
- - ./files/osm-sample-dashboard.json:/etc/grafana/provisioning/dashboards/osm-sample-dashboard.json
- - ./files/osm-system-dashboard.json:/etc/grafana/provisioning/dashboards/osm-system-dashboard.json
- - ./files/datasource-prometheus.yml:/etc/grafana/provisioning/datasources/datasource-prometheus.yml
- hostname: grafana
- ports:
- - "${OSM_GRAFANA_PORTS:-3000:3000}"
- networks:
- - netOSM
- logging:
- driver: "json-file"
- options:
- max-size: "100m"
- max-file: "2"
fi
}
+function generate_docker_compose_files() {
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
+ if [ -n "$NGUI" ]; then
+ # For NG-UI
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose-ngui.yaml $OSM_DOCKER_WORK_DIR/docker-compose-ui.yaml
+ else
+ # Docker-compose
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose-lightui.yaml $OSM_DOCKER_WORK_DIR/docker-compose-ui.yaml
+ fi
+ if [ -n "$INSTALL_PLA" ]; then
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pla/docker-compose.yaml $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml
+ fi
+}
+
+function generate_k8s_manifest_files() {
+ #Kubernetes resources
+ $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
+ if [ -n "$NGUI" ]; then
+ $WORKDIR_SUDO rm -f $OSM_K8S_WORK_DIR/light-ui.yaml
+ else
+ $WORKDIR_SUDO rm -f $OSM_K8S_WORK_DIR/ng-ui.yaml
+ fi
+}
+
+function generate_prometheus_grafana_files() {
+ [ -n "$KUBERNETES" ] && return
+ # Prometheus files
+ $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
+
+ # Grafana files
+ $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/grafana
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
+
+ # Prometheus Exporters files
+ $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
+ $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service $OSM_DOCKER_WORK_DIR/prometheus_exporters/node_exporter.service
+}
+
function generate_docker_env_files() {
echo "Doing a backup of existing env files"
$WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
$WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
echo "Generating docker env files"
- if [ -n "$KUBERNETES" ]; then
- #Kubernetes resources
- $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
- [ -n "$NGUI" ] && $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pods/ng-ui.yaml $OSM_K8S_WORK_DIR/ng-ui.yaml && $WORKDIR_SUDO rm $OSM_K8S_WORK_DIR/light-ui.yaml
- else
- if [ -n "$NGUI" ]; then
- # For NG-UI
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose-ngui.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
- else
- # Docker-compose
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
- fi
- if [ -n "$INSTALL_PLA" ]; then
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pla/docker-compose.yaml $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml
- fi
-
- # Prometheus files
- $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
-
- # Grafana files
- $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/grafana
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
-
- # Prometheus Exporters files
- $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
- $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service $OSM_DOCKER_WORK_DIR/prometheus_exporters/node_exporter.service
- fi
-
# LCM
if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
}
function deploy_osm_pla_service() {
- # corresponding to parse_yaml
- [ ! $OSM_DOCKER_TAG == "7" ] && $WORKDIR_SUDO sed -i "s/opensourcemano\/pla:.*/opensourcemano\/pla:$OSM_DOCKER_TAG/g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
# corresponding to namespace_vol
$WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
# corresponding to deploy_osm_services
for osm in $osm_services; do
$WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/$DOCKER_USER\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
done
+ $WORKDIR_SUDO sed -i "s/opensourcemano\/pla:.*/$DOCKER_USER\/\/pla:$OSM_DOCKER_TAG/g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
}
function namespace_vol() {
pushd $OSM_DOCKER_WORK_DIR
if [ -n "$INSTALL_PLA" ]; then
- sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml -c $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml $OSM_STACK_NAME"
+ track deploy_osm_pla
+ sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml -c $OSM_DOCKER_WORK_DIR/docker-compose-ui.yaml -c $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml $OSM_STACK_NAME"
else
- sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml $OSM_STACK_NAME"
+ sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml -c $OSM_DOCKER_WORK_DIR/docker-compose-ui.yaml $OSM_STACK_NAME"
fi
popd
[ -z "$DOCKER_NOBUILD" ] && generate_docker_images
track docker_build
+ if [ -n "$KUBERNETES" ]; then
+ generate_k8s_manifest_files
+ else
+ generate_docker_compose_files
+ fi
+ track manifest_files
+ generate_prometheus_grafana_files
generate_docker_env_files
+ track env_files
if [ -n "$KUBERNETES" ]; then
if [ -n "$INSTALL_K8S_MONITOR" ]; then
remove_k8s_namespace $OSM_STACK_NAME
deploy_cni_provider
kube_secrets
- [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
+ [ ! $OSM_DOCKER_TAG == "8" ] && parse_yaml $OSM_DOCKER_TAG
namespace_vol
taint_master_node
deploy_osm_services
if [ -n "$INSTALL_PLA"]; then
# optional PLA install
deploy_osm_pla_service
+ track deploy_osm_pla
fi
track deploy_osm_services_k8s
install_k8s_storageclass