Added dockerized deployment as third official deployment method. Created a new Docker...
authorpeusterm <manuel.peuster@uni-paderborn.de>
Thu, 7 Sep 2017 11:03:12 +0000 (13:03 +0200)
committerpeusterm <manuel.peuster@uni-paderborn.de>
Thu, 7 Sep 2017 11:03:12 +0000 (13:03 +0200)
Signed-off-by: Manuel Peuster <manuel@peuster.de>
Dockerfile [new file with mode: 0755]
README.md
ansible/install.yml
setup.py
utils/docker/entrypoint.sh

diff --git a/Dockerfile b/Dockerfile
new file mode 100755 (executable)
index 0000000..84fa586
--- /dev/null
@@ -0,0 +1,85 @@
+# Copyright (c) 2017 SONATA-NFV and Paderborn University
+# ALL RIGHTS RESERVED.
+# 
+# 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.
+#
+# Neither the name of the SONATA-NFV, Paderborn University
+# nor the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# This work has been performed in the framework of the SONATA project,
+# funded by the European Commission under Grant number 671517 through
+# the Horizon 2020 and 5G-PPP programmes. The authors would like to
+# acknowledge the contributions of their colleagues of the SONATA
+# partner consortium (www.sonata-nfv.eu).
+
+FROM ubuntu:xenial
+
+ENV SON_EMU_IN_DOCKER 1
+
+# install required packages
+RUN apt-get clean
+RUN apt-get update \
+    && apt-get install -y  git \
+    net-tools \
+    aptitude \
+    build-essential \
+    python-setuptools \
+    python-dev \
+    python-pip \
+    software-properties-common \
+    ansible \
+    curl \
+    iptables \
+    sudo
+
+# install containernet (using its Ansible playbook)
+RUN git clone https://github.com/containernet/containernet.git
+WORKDIR /containernet/ansible
+RUN ansible-playbook -i "localhost," -c local --skip-tags "notindocker" install.yml
+
+# install emulator (using its Ansible playbook)
+COPY . /son-emu
+WORKDIR /son-emu/ansible
+RUN ansible-playbook -i "localhost," -c local --skip-tags "notindocker" install.yml
+WORKDIR /son-emu
+RUN python setup.py develop
+
+WORKDIR /
+
+# Important: This entrypoint is required to start the OVS service
+ENTRYPOINT ["/son-emu/utils/docker/entrypoint.sh"]
+CMD ["python", "son-emu/examples/default_single_dc_topology.py"]
+
+# open ports for emulator APIs
+# SONATA GK
+EXPOSE 5000
+# EMU REST API
+EXPOSE 5001
+# Monitoring (Prometheus)
+EXPOSE 8081
+# Monitoring (GW)
+EXPOSE 9091
+# OpenStack-fake
+EXPOSE 4000
+# OpenStack-fake
+EXPOSE 10243
+# OpenStack-fake
+EXPOSE 9005
+# OpenStack-fake (Keystone)
+EXPOSE 6001
+# OpenStack-fake
+EXPOSE 9775
+# OpenStack-fake
+EXPOSE 10697
index 4b7877b..3b4c145 100755 (executable)
--- a/README.md
+++ b/README.md
@@ -74,9 +74,9 @@ Contributing to the the emulator is really easy. You must:
 4. Follow/answer related [issues](https://github.com/sonata-nfv/son-emu/issues) (see Feedback-Chanel, below).
 
 ## Installation
 4. Follow/answer related [issues](https://github.com/sonata-nfv/son-emu/issues) (see Feedback-Chanel, below).
 
 ## Installation
-There are two ways to install and use the emulation platform. The simple one is to use Vagrant to create a VirtualBox-based VM on your machine that contains the pre-installed and configured emulator. The more complicated installation requires a freshly installed Ubuntu 16.04 LTS and is done by an ansible playbook.
+There are three ways to install and use the emulation platform. The simple one is to use Vagrant to create a VirtualBox-based VM on your machine that contains the pre-installed and configured emulator. The more complicated installation requires a freshly installed Ubuntu 16.04 LTS and is done by an ansible playbook. The third option is to use a nested Docker environment to run the emulator inside a Docker container.
 
 
-### Vagrant Installation
+### Option 1: Vagrant Installation
 
 * Request VirtualBox and Vagrant to be installed on the system.
 * `git clone https://github.com/sonata-nfv/son-emu.git`
 
 * Request VirtualBox and Vagrant to be installed on the system.
 * `git clone https://github.com/sonata-nfv/son-emu.git`
@@ -86,7 +86,7 @@ There are two ways to install and use the emulation platform. The simple one is
 
 Follow the MOTD in the VM to run the example topology and the dummy-gatekeeper. The dummy-gatekeeper's default port 5000 is forwarded to the host machine and can be accessed from it by using, e.g., curl http://127.0.0.1:5000/packages.
 
 
 Follow the MOTD in the VM to run the example topology and the dummy-gatekeeper. The dummy-gatekeeper's default port 5000 is forwarded to the host machine and can be accessed from it by using, e.g., curl http://127.0.0.1:5000/packages.
 
-### Ansible Installation
+### Option 2: Ansible Installation
 
 * Requires: Ubuntu 16.04 LTS
 * `sudo apt-get install ansible git aptitude`
 
 * Requires: Ubuntu 16.04 LTS
 * `sudo apt-get install ansible git aptitude`
@@ -105,6 +105,15 @@ Follow the MOTD in the VM to run the example topology and the dummy-gatekeeper.
 * `cd ~/son-emu/ansible`
 * `sudo ansible-playbook -i "localhost," -c local install.yml`
 
 * `cd ~/son-emu/ansible`
 * `sudo ansible-playbook -i "localhost," -c local install.yml`
 
+### Option 3: Nested Docker Deployment
+This option requires a Docker installation on the host machine on which the emulator should be deployed.
+
+* `git clone https://github.com/sonata-nfv/son-emu.git`
+* `cd ~/son-emu`
+* Build the container: `docker build -t son-emu-img .`
+* Run the (interactive) container: `docker run --name son-emu -it --rm --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sock son-emu-img /bin/bash`
+
+
 ## Usage
 
 ### Examples
 ## Usage
 
 ### Examples
index b032b0b..61d12a2 100755 (executable)
@@ -89,6 +89,9 @@
    - name: install ipaddress
      pip: name=ipaddress state=latest
 
    - name: install ipaddress
      pip: name=ipaddress state=latest
 
+   - name: install gevent
+     pip: name=gevent state=latest
+
    #- name: install urllib
    #  pip: name=urllib state=latest
 
    #- name: install urllib
    #  pip: name=urllib state=latest
 
index fd36cf3..a3c9247 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -43,7 +43,6 @@ setup(name='emuvim',
       },
       install_requires=[
           'pyaml',
       },
       install_requires=[
           'pyaml',
-          'zerorpc',
           'tabulate',
           'argparse',
           'networkx',
           'tabulate',
           'argparse',
           'networkx',
index c67e276..bcd4c56 100755 (executable)
@@ -1,12 +1,31 @@
-#! /bin/bash -e
+#!/bin/bash
+# Copyright (c) 2017 SONATA-NFV and Paderborn University
+# ALL RIGHTS RESERVED.
+# 
+# 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.
+#
+# Neither the name of the SONATA-NFV, Paderborn University
+# nor the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# This work has been performed in the framework of the SONATA project,
+# funded by the European Commission under Grant number 671517 through
+# the Horizon 2020 and 5G-PPP programmes. The authors would like to
+# acknowledge the contributions of their colleagues of the SONATA
+# partner consortium (www.sonata-nfv.eu).
+set -e
 set -x
 
 set -x
 
-#cp /containernet/util/docker/entrypoint.sh /tmp/x.sh
-#cat /tmp/x.sh | awk 'NR==1{print; print "set -x"} NR!=1' > /conteinernet/util/docker/entrypoint.sh
-
-# this cannot be done from the Dockerfile since we have the socket not mounted during build
-# this image is needed for the monitoring in son-emu
-#echo 'Pulling the "google/cadvisor" image ... please wait'
-#docker pull 'google/cadvisor'
-
-exec /containernet/util/docker/entrypoint.sh $*
\ No newline at end of file
+# need to call containernet's entrypoint to enable OVS
+exec /containernet/util/docker/entrypoint.sh $*