Преглед изворни кода

Merge branch '3-dockercompose' into 'master'

Resolve "Dockercompose"

Closes #3

See merge request interlink-sa/flowdat3/modules/installer!49
Guillermo Espinoza пре 6 година
родитељ
комит
c67fb5950c

+ 18 - 40
tools/Dockerfile

@@ -1,48 +1,26 @@
-FROM debian:9
-EXPOSE 8000
-
-## install app
-RUN apt-get update && apt-get install -yq wget apt-transport-https lsb-release ca-certificates software-properties-common gnupg2 curl iputils-ping
-RUN wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
-RUN sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
-RUN apt-get update && apt-get install -yq python python-pip git vim tmux zip build-essential php7.1 iptables xz-utils php7.1-mbstring php7.1-gmp
-# mysql-client php7.1 php7.1-mysql php7.1-curl php7.1-xml php7.1-zip php7.1-bcmath php7.1-mbstring php7.1-dom php7.1-amqp php7.1-soap php7.1-snmp
-
-## install composer
-ADD composer.sh /opt/composer.sh
-RUN chmod +x /opt/composer.sh ; sh /opt/composer.sh
-
-## install docker-composer
-#RUN curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
-#RUN chmod +x /usr/local/bin/docker-compose
-RUN pip install --upgrade pip
-RUN pip install docker-compose==1.22
-
-## install ansible
-RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" | tee /etc/apt/sources.list.d/ansible.list
-RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
-RUN apt-get update && apt-get install -yq ansible
-
-## install docker
-RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"
-RUN apt-get update && apt-get install -yq --allow-unauthenticated docker-ce
-
-## add keys ssh from hosts
-RUN mkdir ~/.ssh
-RUN ssh-keyscan -H -p 22  bitbucket.org >> ~/.ssh/known_hosts
-RUN ssh-keyscan -H -p 222  infra.flowdat.com >> ~/.ssh/known_hosts
-
-## add key to container
-COPY keys /opt/keys
-RUN chmod 0400 /opt/keys/*
+FROM docker.infra.flowdat.com/fd3/sf-php:7.1
 
 ARG DIR_INSTALL
-RUN mkdir -p $DIR_INSTALL
-RUN chmod -R 777 $DIR_INSTALL
+
 ADD . $DIR_INSTALL
+
 WORKDIR $DIR_INSTALL
 
-RUN cd $DIR_INSTALL ; eval $(ssh-agent); ssh-add /opt/keys/bitbucket.id_rsa; composer install  -n
+RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" | tee /etc/apt/sources.list.d/ansible.list; \
+    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367; \
+    apt-get update; \
+    apt-get install -yq software-properties-common gnupg2 iptables \
+                        xz-utils ansible; \
+    curl https://bootstrap.pypa.io/get-pip.py | python; \
+    pip install -U pip setuptools; \
+    curl -fsSL get.docker.com | sh; \
+    pip install docker-compose==1.22; \
+    mkdir -p $DIR_INSTALL; \
+    chmod -R 777 $DIR_INSTALL; \
+    eval $(ssh-agent); \
+    ssh-add /opt/keys/bitbucket.id_rsa; \
+    composer install  -n; \
+    rm -rf /var/lib/apt/lists/*
 
 ENV DOCKER_HOST unix:///tmp/docker.sock
 

+ 2 - 2
tools/composer.lock

@@ -674,7 +674,7 @@
             "source": {
                 "type": "git",
                 "url": "ssh://git@infra.flowdat.com:222/VendorSoftwareFlowdat3/php-docker-lib.git",
-                "reference": "4f5917ab47f8b5820c4489be33590b6bbbc52b15"
+                "reference": "dec0418094fbf0c2a37766542b291cf5b4a54c3c"
             },
             "require": {
                 "symfony/yaml": "^3.3"
@@ -694,7 +694,7 @@
                     "email": "info@interlink.com.ar"
                 }
             ],
-            "time": "2019-01-31T11:40:58+00:00"
+            "time": "2019-02-26T15:47:41+00:00"
         },
         {
             "name": "jane/jane",

+ 12 - 0
tools/playbook.yml

@@ -304,3 +304,15 @@
 
     - name: Docker up nginx
       command: "docker-compose up -d nginx"
+
+- name: "Clear all cache. Tag=clear_cache_all"
+  hosts: 127.0.0.1
+  connection: local
+  tags: clear_cache_all
+  tasks:
+    - name: "Clear all cache"
+      command: "rm -rf /opt/flowdat/{{ item }}/var/cache/*/"
+      with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
+    - name: "Chmod cache"
+      command: "chmod 777 -R /opt/flowdat/{{ item }}/var/cache"
+      with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"

+ 90 - 64
tools/src/Release.php

@@ -430,11 +430,8 @@ class Release extends Command
                     }
 
                 }
-
             }
-
         }
-
         $modules = implode(",", $modules);
         return $modules;
     }
@@ -468,7 +465,7 @@ class Release extends Command
 
     function getDockerComposer($version = "latest", $host_env_file = "host.env", $registry = "docker.infra.flowdat.com/")
     {
-        $composer = new FileFormat("../", 3);
+        $composer = new FileFormat("../", "3.7");
         $this->registerVolumes($composer);
         $nc = new NetworkConfig();
         $nc->addDriver()->addSubnetGateway("172.172.172.0/24");
@@ -479,10 +476,6 @@ class Release extends Command
             "host_env_file" => $host_env_file,
             "registry" => $registry);
 
-
-        /**************************************************************************************/
-        /* Apps / Web UI / PMA */
-        /**************************************************************************************/
         $ip = explode(".", $this->_network_ip);
         array_pop($ip);
         $ip = implode(".", $ip);
@@ -500,7 +493,7 @@ class Release extends Command
                 ->add();
         }
 
-
+        $this->checkLinkDependencyDockerCompose($composer);
         $this->_dObj->file("docker-compose.yml")->content($composer->render());
 
         // escribo un archivo inventory.ini por defecto para no tener que lanzar los docker
@@ -601,8 +594,10 @@ class Release extends Command
         $oautModules = "";
         foreach ($this->_modules as $nameApp => $app) {
             if (isset($app['OAUTH']) && $app['OAUTH']) {
-                $this->_dObj->file($nameApp . ".oauth.env")->content("");
-                $oautModules = $oautModules . $nameApp . ",";
+                if (!file_exists(realpath($this->directory) . $nameApp . ".oauth.env")) {
+                    $this->_dObj->file($nameApp . ".oauth.env")->content("");
+                    $oautModules = $oautModules . $nameApp . ",";
+                }
             }
         }
         $this->_ansible_vars["MODULES_INSTALL"] = substr($oautModules, 0, strlen($oautModules) - 1);
@@ -747,63 +742,94 @@ class Release extends Command
     public function addNginxLinks($module, FileFormat $composer)
     {
         if ($this->_add_nginx_links) {
-            $composer->service($module)
-                ->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Base())->getModuleName()))
-                ->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Ftth())->getModuleName()))
-                ->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Cablemodem())->getModuleName()))
-                ->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Stats())->getModuleName()))
-                ->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Dhcp())->getModuleName()))
-                ->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Radius())->getModuleName()));
+            if (in_array((new Base())->getModuleName(), $this->_modules_all)) {
+                $composer->service($module)->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Base())->getModuleName()));
+            }
+            if (in_array((new Ftth())->getModuleName(), $this->_modules_all)) {
+                $composer->service($module)->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Ftth())->getModuleName()));
+            }
+            if (in_array((new Cablemodem())->getModuleName(), $this->_modules_all)) {
+                $composer->service($module)->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Cablemodem())->getModuleName()));
+            }
+            if (in_array((new Stats())->getModuleName(), $this->_modules_all)) {
+                $composer->service($module)->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Stats())->getModuleName()));
+            }
+            if (in_array((new Dhcp())->getModuleName(), $this->_modules_all)) {
+                $composer->service($module)->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Dhcp())->getModuleName()));
+            }
+            if (in_array((new Radius())->getModuleName(), $this->_modules_all)) {
+                $composer->service($module)->addLinks((new Nginx())->getModuleName(), $this->getDomain((new Radius())->getModuleName()));
+            }
         }
     }
 
     private function registerVolumes(FileFormat $composer)
     {
-        $composer->getVolumes()->addVolumen(Pma::PMA_VOLUMEN, 'local');
-        $composer->getVolumes()->addVolumen(Swagger::SWAGGER_VOLUMEN, 'local');
-        $composer->getVolumes()->addVolumen(Base::BASE_SOCKET_VOLUMEN, 'local');
-        $composer->getVolumes()->addVolumen(Cablemodem::CABLEMODEM_SOCKET_VOLUMEN, 'local');
-        $composer->getVolumes()->addVolumen(Dhcp::DHCP_SOCKET_VOLUMEN, 'local');
-        $composer->getVolumes()->addVolumen(Ftth::FTTH_SOCKET_VOLUMEN, 'local');
-        $composer->getVolumes()->addVolumen(Radius::RADIUS_SOCKET_VOLUMEN, 'local');
-        $composer->getVolumes()->addVolumen(Stats::STATS_SOCKET_VOLUMEN, 'local');
-        $composer->getVolumes()->addVolumen(Api::API_SOCKET_VOLUMEN, 'local');
-
+        if (in_array((new Pma())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Pma::PMA_VOLUMEN, 'local');
+        }
+        if (in_array((new Swagger())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Swagger::SWAGGER_VOLUMEN, 'local');
+        }
+        if (in_array((new Base())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Base::BASE_SOCKET_VOLUMEN, 'local');
+        }
+        if (in_array((new Cablemodem())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Cablemodem::CABLEMODEM_SOCKET_VOLUMEN, 'local');
+        }
+        if (in_array((new Dhcp())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Dhcp::DHCP_SOCKET_VOLUMEN, 'local');
+        }
+        if (in_array((new Ftth())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Ftth::FTTH_SOCKET_VOLUMEN, 'local');
+        }
+        if (in_array((new Radius())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Radius::RADIUS_SOCKET_VOLUMEN, 'local');
+        }
+        if (in_array((new Stats())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Stats::STATS_SOCKET_VOLUMEN, 'local');
+        }
+        if (in_array((new Api())->getModuleName(), $this->_modules_all)) {
+            $composer->getVolumes()->addVolumen(Api::API_SOCKET_VOLUMEN, 'local');
+        }
     }
-}
-// 2= Nginx
-// 3= Mongodb
-// 4= Mysql
-// 5= Supervisord
-// 6= Amqp
-// 7= Redis
-// 8= Api
-// 9= Swagger
-//10= Pma
-//11= Base
-//12= Base_log
-//13= Cablemodem
-//14= Cablemodem_cmd
-//15= Cablemodem_task
-//16= Dhcp
-//17= Dhcp_task
-//18= Ftth
-//19= Ftth_cmd
-//20= Ftth_task
-//21= Kea
-//22= Radius
-//23= Stats
-//24= Stats_cmd
-//25= Statsd
-//26= Tftp
-//27= Freeradius
-//28= Genieacs_cwmp
-//29= Genieacs_fs
-//30= Genieacs_gui
-//31= Genieacs_nbi
-//32= Geoserver
-//33= Jsendpoint
-//34= Jsonep_mongo
-//35= Jsonep_mysql
-
 
+    /**
+     * @param FileFormat $composer Contains composer.
+     * @return FileFormat Return composer with corrected link.
+     */
+    private function checkLinkDependencyDockerCompose(FileFormat $composer)
+    {
+        foreach ($composer->getServices() as $key => $value) {
+            // every service in docker compose
+            if ($value->getLinks()) {
+                $arrtmp = [];
+                foreach ($value->getLinks() as $link) {
+                    // every link in service in docker compose
+                    $found = false;
+                    foreach ($this->_modules as $module => $env) {
+                        // every module selected for install
+                        if (strpos($module, "genieacs") !== false) {
+                            $moduleg = str_replace("-", "_", $module);
+                        } else {
+                            $moduleg = "";
+                        }
+                        //remove nginx: to compare because nginx is always TRUE
+                        $linkTmp = str_replace("nginx:", "", $link);
+                        if (strpos($linkTmp, $module) === false) {
+                        } else if ($moduleg != "" && strpos($linkTmp, $moduleg) === false) {
+                        } else {
+                            $found = true;
+                        }
+                    }
+                    if ($found) {
+                        // add link only if is in list of modules install
+                        $arrtmp[] = $link;
+                    }
+                }
+                $value->setLinks($arrtmp);
+            }
+        }
+        return $composer;
+    }
+}

+ 1 - 1
tools/src/Services/Dhcp.php

@@ -29,7 +29,7 @@ class Dhcp extends InitialService
             ])
             ->setOauth(true)
             ->setRequired(false)
-            ->setDepends([]);
+            ->setDepends(['cablemodem']);
     }
 
     /**

+ 1 - 1
tools/src/Services/Genieacs_cwmp.php

@@ -31,7 +31,7 @@ class Genieacs_cwmp extends InitialService
      */
     public function add()
     {
-        $module = str_replace("_", "-", $this->getModuleName());
+        $module = $this->getModuleName();
         if ($this->getRelease()->needInstallModule($module)) {
             $this->getComposer()
                 ->addService($module)

+ 1 - 1
tools/src/Services/Genieacs_fs.php

@@ -31,7 +31,7 @@ class Genieacs_fs extends InitialService
      */
     public function add()
     {
-        $module = str_replace("_", "-", $this->getModuleName());
+        $module = $this->getModuleName();
         if ($this->getRelease()->needInstallModule($module)) {
             $this->getComposer()
                 ->addService($module)

+ 2 - 2
tools/src/Services/Genieacs_gui.php

@@ -31,12 +31,12 @@ class Genieacs_gui extends InitialService
      */
     public function add()
     {
-        $module = str_replace("_", "-", $this->getModuleName());
+        $module = $this->getModuleName();
         if ($this->getRelease()->needInstallModule($module)) {
             $this->getComposer()
                 ->addService($module)
                 ->build("extra/genieacs/genieacs-gui")
-                ->addLinks(str_replace("_", "-", (new Genieacs_nbi())->getModuleName()))
+                ->addLinks((new Genieacs_nbi())->getModuleName())
                 ->addPorts("3001", "3000")
                 ->restart($this->getRelease()->_docker_restart_default)
                 ->network($this->getRelease()->_network_name)->ipv4_address($this->generateIP($this->ip_server));

+ 2 - 1
tools/src/Services/Genieacs_nbi.php

@@ -31,7 +31,7 @@ class Genieacs_nbi extends InitialService
      */
     public function add()
     {
-        $module = str_replace("_", "-", $this->getModuleName());
+        $module = $this->getModuleName();
         if ($this->getRelease()->needInstallModule($module)) {
             $this->getComposer()
                 ->addService($module)
@@ -43,4 +43,5 @@ class Genieacs_nbi extends InitialService
                 ->network($this->getRelease()->_network_name)->ipv4_address($this->generateIP($this->ip_server));
         }
     }
+
 }

+ 0 - 1
tools/src/Services/Mongodb.php

@@ -44,7 +44,6 @@ class Mongodb extends InitialService
                 ->addVolumes("./mongodb", "/data/db")
                 ->addVolumes("./extra/statsd/statsd/backend/mongodb/scripts", "/scripts")
                 ->setReservationMemory('10g')
-                ->setReservationCPU("0.2")
                 ->network($this->getRelease()->_network_name)->ipv4_address($this->generateIP($this->ip_server));
         }
     }

+ 0 - 1
tools/src/Services/Pma.php

@@ -41,7 +41,6 @@ class Pma extends InitialService
         $host_env_file = "host.env";
         extract($this->getConfigVar());
         if ($this->getRelease()->needInstallModule($module)) {
-            $this->addVarEnv("PMA_ABSOLUTE_URI", "https://" . $this->getRelease()->getDomain($module));
             $this->getComposer()
                 ->addService($module)
                 ->image("phpmyadmin/phpmyadmin")