Fix problems during build/deployment process 26/226/6
authorMichal Skalski <mskalski@mirantis.com>
Tue, 31 Mar 2015 07:27:25 +0000 (09:27 +0200)
committerMichal Skalski <mskalski@mirantis.com>
Thu, 2 Apr 2015 09:47:35 +0000 (11:47 +0200)
If we used 'make all' for build iso, only release section from
f_odl_docker Makefile was executed, so odl docker image and docker
binary were not created.

This patch also try resolve problems which appeared during
execution of start_odl_container.sh on controller node:

  * install and run cgroup-lite to mitigate 'failed to find the cgroup
    root' error
  * use proper path to docker image and binary
  * prevent import of docker image before daemon is not fully
    initialized
  * because docker binary is delivered by puppet, we should execute
    commands against it, not try use system binary which is probably
    not present on controller node
  * stop use daemon mode('-d') of 'docker run' if user want to have
    access to container shell
  * fix name of start script which is run inside container when daemon
    mode is used

It looks like file 'fuel/build/f_odl_docker/scripts/start_odl_container.sh'
is not used and duplicate:
'fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh'

JIRA:

Change-Id: Ia6064dbacf30902bda557e5d0b631b5f5f207b5e
Signed-off-by: Michal Skalski <mskalski@mirantis.com>
common/puppet-opnfv/manifests/templates/dockerfile/Dockerfile
fuel/build/Makefile
fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp
fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh
fuel/build/f_odl_docker/scripts/start_odl_container.sh [deleted file]

index 6b2f241..5241a80 100644 (file)
@@ -79,4 +79,4 @@ EXPOSE 52150
 EXPOSE 36826
 
 # set the ENTRYPOINT - An entry point allows us to run this container as an exectuable
-CMD ["/etc/init.d/start_odl_docker.sh"]
+CMD ["/etc/init.d/start_odl_docker_container.sh"]
index 364fe31..fda212d 100644 (file)
@@ -62,6 +62,7 @@ all:
        @echo "Versions of cached build results built by" $(shell hostname) "at" $(shell date -u) > $(VERSION_FILE)
        @echo "cache.mk" $(shell md5sum $(BUILD_BASE)/cache.mk | cut -f1 -d " ") >> $(VERSION_FILE)
        @echo "config.mk" $(shell md5sum $(BUILD_BASE)/config.mk | cut -f1 -d " ") >> $(VERSION_FILE)
+       $(MAKE) -C f_odl_docker -f Makefile all
        @make -C docker
        @docker/runcontext $(DOCKERIMG) $(MAKE) $(MAKEFLAGS) iso
 
index ae24460..922ab41 100644 (file)
@@ -35,6 +35,20 @@ class opnfv::odl_docker
                 source => "/etc/puppet/modules/opnfv/scripts/start_odl_container.sh",
                 mode => 750,
              }
+
+        # fix failed to find the cgroup root issue
+        # https://github.com/docker/docker/issues/8791
+        if $::operatingsystem == 'Ubuntu' {
+          package {'cgroup-lite':
+            ensure => present,
+          }
+
+          service {'cgroup-lite':
+            ensure  => running,
+            enable  => true,
+            require => Package['cgroup-lite'],
+          }
+        }
   }
  }
 }
index 0b4fd46..0bddd20 100755 (executable)
@@ -24,7 +24,7 @@ DEV=1
 
 MATCH_PORT=1
 
-LOCALPATH=/opt/opnfv/odl_docker
+LOCALPATH=/opt/opnfv/odl
 DOCKERBINNAME=docker-latest
 DOCKERIMAGENAME=odl_docker_image.tar
 DNS=8.8.8.8
@@ -54,6 +54,10 @@ else
        echo "Starting Docker in Daemon mode"
        chmod +x $LOCALPATH/$DOCKERBINNAME
        $LOCALPATH/$DOCKERBINNAME -d &
+
+  # wait until docker will be fully initialized
+  # before any further action against just started docker
+  sleep 5
 fi
 
 
@@ -72,17 +76,18 @@ echo " starting up ODL - DLUX and Mapping Ports"
 if [ "$MATCH_PORT" -eq "1" ]
 then
         echo "Starting up Docker..."
-        docker rm odl_docker
+        $LOCALPATH/$DOCKERBINNAME rm odl_docker
+fi
 
 if [ "$ENABLE_SHELL" -eq "1" ];
 then
         echo "Starting Container in Interactive Mode (/bin/bash will be provided, you will need to run ./start_odl_docker.sh inside the container yourself)"
-        docker run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel  /bin/bash
+        $LOCALPATH/$DOCKERBINNAME run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -t loving_daniel  /bin/bash
 else
         echo "Starting Conatiner in Daemon mode - no shell will be provided and docker attach will not provide shell)"
-        docker run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel
+        $LOCALPATH/$DOCKERBINNAME run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel
         echo "should see the process listed here in docker ps -a"
-        docker ps -a;
+        $LOCALPATH/$DOCKERBINNAME ps -a;
         echo "Match Port  enabled, you can reach the DLUX login at: "
         echo "http://$HOST_IP:8181/dlux.index.html"
 fi
diff --git a/fuel/build/f_odl_docker/scripts/start_odl_container.sh b/fuel/build/f_odl_docker/scripts/start_odl_container.sh
deleted file mode 100755 (executable)
index 0fca48f..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/bin/bash
-#  Ericsson Canada Inc.
-#  Authoer: Daniel Smith
-#
-#   A helper script to install and setup the ODL docker conatiner on the controller
-#
-#
-#   Inputs:  odl_docker_image.tar
-#
-#   Usage:  ./start_odl_docker.sh
-
-# ENVS
-source ~/.bashrc
-source ~/openrc
-
-# VARS
-
-# Switch for Dev mode - uses apt-get on control to cheat and get docker installed locally rather than from puppet source
-
-DEV=1
-
-# Switch for 1:1 port mapping of EXPOSED ports in Docker to the host, if set to 0, then random ports will be used - NOTE: this doesnt work for all web services X port on Host --> Y port in Container,
-# especially for SSL/HTTPS cases. Be aware.
-
-MATCH_PORT=1
-
-LOCALPATH=/opt/opnfv/odl_docker
-DOCKERBINNAME=docker-latest
-DOCKERIMAGENAME=odl_docker_image.tar
-DNS=8.8.8.8
-HOST_IP=`ifconfig br-fw-admin  | grep -i "inet addr" | awk -F":" '{print $2}' | awk -F" " '{print $1}'`
-
-
-# Set this to "1" if you want to have your docker container startup into a shell
-
-
-ENABLE_SHELL=1
-
-
-echo " Fetching Docker "
-if [ "$DEV" -eq "1" ];
-# If testing Locally (on a control node) you can set DEV=1 to enable apt-get based install on the control node (not desired target, but good for testing).
-then
-        echo "Dev Mode - Fetching from Internet";
-        echo " this wont work in production builds";
-        apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
-        mkdir -p $LOCALPATH
-        wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O $LOCALPATH/$DOCKERBINNAME
-        wget http://ftp.us.debian.org/debian/pool/main/d/docker.io/docker.io_1.3.3~dfsg1-2_amd64.deb
-        chmod 777 $LOCALPATH/$DOCKERBINNAME
-        echo "done ";
-else
-        echo "Using Binaries delivered from Puppet"
-       echo "Starting Docker in Daemon mode"
-       chmod +x $LOCALPATH/$DOCKERBINNAME
-       $LOCALPATH/$DOCKERBINNAME -d &
-fi
-
-
-# We need to perform some cleanup of the Openstack Environment
-echo "TODO -- This should be automated in the Fuel deployment at some point"
-echo "However, the timing should come after basic tests are running, since this "
-echo " part will remove the subnet router association that is deployed automativally"
-echo " via fuel. Refer to the ODL + Openstack Integration Page "
-
-# Import the ODL container into docker
-
-echo "Importing ODL container into docker"
-$LOCALPATH/$DOCKERBINNAME load -i $LOCALPATH/$DOCKERIMAGENAME
-
-echo " starting up ODL - DLUX and Mapping Ports"
-if [ "$MATCH_PORT" -eq "1" ]
-then
-        echo "Starting up Docker..."
-        docker rm odl_docker
-
-if [ "$ENABLE_SHELL" -eq "1" ];
-then
-        echo "Starting Container in Interactive Mode (/bin/bash will be provided, you will need to run ./start_odl_docker.sh inside the container yourself)"
-        docker run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel  /bin/bash
-else
-        echo "Starting Conatiner in Daemon mode - no shell will be provided and docker attach will not provide shell)"
-        docker run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel
-        echo "should see the process listed here in docker ps -a"
-        docker ps -a;
-        echo "Match Port  enabled, you can reach the DLUX login at: "
-        echo "http://$HOST_IP:8181/dlux.index.html"
-fi