Explorar o código

Merge branch 'master' of https://bitbucket.org/ikflowdat/installer

Fernando Alonso %!s(int64=7) %!d(string=hai) anos
pai
achega
2cea9bfa12

+ 13 - 0
README.md

@@ -31,3 +31,16 @@ Cada vez que se genere un módulo nuevo se debe agregar la dirección del reposi
 
 ##Extra (ADICIONAL)
     El módulo extra debe hacerse en forma manual. Tanto el branch como tag. Por ahora debe usuarse el master. 
+
+## Actualización FLOWDAT
+     Primero debemos conectarnos con el servidor para luego iniciar el dind y lanzar los comandos correspondientes.
+     Para conectarme al servidor y lanzar el dind puedo ejecutar la siguiente sentencia:
+         ssh root@base.fd3.flowdat.com -t "docker run -it -v /opt/:/opt/ -v /var/run/docker.sock:/tmp/docker.sock dind bash"
+     Cambiar los permisos de la key para conectarse a bitbucket:
+         chmod 600 /opt/flowdat/keys/bitbucket.id_rsa
+     Agregar la key al ssh-agent:
+         eval $(ssh-agent); ssh-add /opt/flowdat/keys/bitbucket.id_rsa
+     Ahora debo actualizar el installer con el siguiente comando (ver las opciones con --help):
+         php cmd.php ik:update:installer vX.Y.Z 
+     Ahora debo actualizar el installer con el siguiente comando (ver las opciones con --help):
+         php cmd.php ik:update:modules ../modules.ini vX.Y.Z 

+ 0 - 480
docker-compose.yml

@@ -1,480 +0,0 @@
-version: "2"
-services:
-
-  base:
-    restart: always
-    image: fd3-base
-    build:
-      context: ./base
-    links:
-      - mysql:mysql
-      - amqp:amqp
-    env_file:
-      - host.env
-    environment:
-      VIRTUAL_HOST: base.fd3.flowdat.com
-      HTTPS_METHOD: nohttps
-    volumes:
-      - ./base/:/opt/base/
-
-  ftth:
-    restart: always
-    image: fd3-ftth
-    build:
-      context: ./ftth
-    links:
-      - mysql:mysql
-      - base:base
-      - nginx-proxy:base.fd3.flowdat.com
-      - nginx-proxy:mapas.fd3.flowdat.com
-      - amqp:amqp
-    env_file:
-      - host.env
-    environment:
-      VIRTUAL_HOST: ftth.fd3.flowdat.com
-      OAUTH_CLIENT_ID : 1_3323sq6urn8kwccg8s4ok848ggwwgkw4c08wsc4cwkc08osocc
-      OAUTH_CLIENT_SECRET : 5w7gx6ptdoo4g8cwwo88o8gowosgco84sso08ssow0osg88g8k
-      HTTPS_METHOD: nohttps
-      #LETSENCRYPT_HOST: ftth.fd3.flowdat.com
-      #LETSENCRYPT_EMAIL: andrade.luciano@gmail.com
-      AMQP_KEY: ftth
-    volumes:
-      - ./ftth/:/opt/ftth/
-
-  radius:
-    restart: always
-    image: fd3-radius
-    build:
-      context: ./radius
-    links:
-      - mysql:mysql
-      - base:base
-      - nginx-proxy:base.fd3.flowdat.com
-      - nginx-proxy:mapas.fd3.flowdat.com
-      - nginx-proxy:ftth.fd3.flowdat.com
-      - nginx-proxy:stats.fd3.flowdat.com
-      - nginx-proxy:radius.fd3.flowdat.com
-      - amqp:amqp
-    env_file:
-      - host.env
-    environment:
-      VIRTUAL_HOST: radius.fd3.flowdat.com
-      OAUTH_CLIENT_ID : 4_2jmm87sirewwwsgk0cc0occ8kgk8cwk0ook4kkw8cgw0kg0gg4
-      OAUTH_CLIENT_SECRET : 4ya40zu3d1c0go8oc4gw8kw8gww8cskssok4gcokk80ks00ss8
-      HTTPS_METHOD: nohttps
-      #LETSENCRYPT_HOST: ftth.fd3.flowdat.com
-      #LETSENCRYPT_EMAIL: andrade.luciano@gmail.com
-    volumes:
-      - ./radius/:/opt/radius/
-
-  mapas:
-    restart: always
-    image: fd3-mapas
-    build:
-      context: ./mapas
-    links:
-      - mysql:mysql
-      - base:base
-      - nginx-proxy:base.fd3.flowdat.com
-      - nginx-proxy:ftth.fd3.flowdat.com
-      - amqp:amqp
-    env_file:
-      - host.env
-    environment:
-      VIRTUAL_HOST: mapas.fd3.flowdat.com
-      HTTPS_METHOD: nohttps
-      OAUTH_CLIENT_ID : 1_3323sq6urn8kwccg8s4ok848ggwwgkw4c08wsc4cwkc08osocc
-      OAUTH_CLIENT_SECRET : 5w7gx6ptdoo4g8cwwo88o8gowosgco84sso08ssow0osg88g8k
-    volumes:
-      - ./mapas/:/opt/mapas/
-
-  stats:
-    restart: always
-    image: fd3-stats
-    build:
-      context: ./stats
-    links:
-      - mysql:mysql
-      - base:base
-      - nginx-proxy:base.fd3.flowdat.com
-      - nginx-proxy:geoserver.fd3.flowdat.com
-      - amqp:amqp
-      - geoserver:geoserver
-      - mysql_jsonendpoint:mysql_jsonendpoint
-      - mongodb_jsonendpoint:mongodb_jsonendpoint
-    env_file:
-      - host.env
-    environment:
-      VIRTUAL_HOST: stats.fd3.flowdat.com
-      HTTPS_METHOD: nohttps
-      OAUTH_CLIENT_ID : 1_3323sq6urn8kwccg8s4ok848ggwwgkw4c08wsc4cwkc08osocc
-      OAUTH_CLIENT_SECRET : 5w7gx6ptdoo4g8cwwo88o8gowosgco84sso08ssow0osg88g8k
-      AMQP_KEY: stats
-    volumes:
-      - ./stats/:/opt/stats/
-      - ./geoserver/geoserver-shapes:/var/www/shapes
-
-  cablemodem:
-    restart: always
-    image: fd3-cablemodem
-    build:
-      context: ./cablemodem
-    links:
-      - mysql:mysql
-      - base:base
-      - nginx-proxy:base.fd3.flowdat.com
-      - nginx-proxy:mapas.fd3.flowdat.com
-      - nginx-proxy:ftth.fd3.flowdat.com
-      - nginx-proxy:stats.fd3.flowdat.com
-      - nginx-proxy:radius.fd3.flowdat.com
-      - amqp:amqp
-    env_file:
-      - host.env
-    environment:
-      VIRTUAL_HOST: cablemodem.fd3.flowdat.com
-      OAUTH_CLIENT_ID : 1_3323sq6urn8kwccg8s4ok848ggwwgkw4c08wsc4cwkc08osocc
-      OAUTH_CLIENT_SECRET : 5w7gx6ptdoo4g8cwwo88o8gowosgco84sso08ssow0osg88g8k
-      HTTPS_METHOD: nohttps
-      AMQP_KEY: cablemodem
-    volumes:
-      - ./cablemodem/:/opt/cablemodem/
-  
-  dhcp:
-    restart: always
-    image: fd3-cablemodem
-    build:
-      context: ./cablemodem
-    links:
-      - mysql:mysql
-      - base:base
-      - nginx-proxy:base.fd3.flowdat.com
-      - nginx-proxy:mapas.fd3.flowdat.com
-      - nginx-proxy:ftth.fd3.flowdat.com
-      - nginx-proxy:stats.fd3.flowdat.com
-      - nginx-proxy:radius.fd3.flowdat.com
-      - amqp:amqp
-    env_file:
-      - host.env
-    environment:
-      VIRTUAL_HOST: dhcp.fd3.flowdat.com
-      OAUTH_CLIENT_ID : 1_3323sq6urn8kwccg8s4ok848ggwwgkw4c08wsc4cwkc08osocc
-      OAUTH_CLIENT_SECRET : 5w7gx6ptdoo4g8cwwo88o8gowosgco84sso08ssow0osg88g8k
-      HTTPS_METHOD: nohttps
-    volumes:
-      - ./cablemodem/:/opt/cablemodem/   
-
-  mysql:
-    restart: always
-    environment:
-        MYSQL_ROOT_PASSWORD: 235r2342gtfsw
-        MYSQL_USER: iksop
-        MYSQL_PASSWORD: 235r2342gtfsw
-    volumes:
-      - ./mysql/:/var/lib/mysql/
-    image: mysql:5.7
-
-  mongodb:
-    volumes:
-      - ./mongodb:/data/db
-    image: mongo:3.4
-  
-  amqp:
-    restart: always
-    image: rabbitmq:3-management
-    restart: always
-    ports:
-      - "8072:15672"
-
-  phpmyadmin:
-    restart: always
-    image: phpmyadmin/phpmyadmin
-    links:
-      - mysql:db
-    environment:
-      MYSQL_ROOT_PASSWORD: 235r2342gtfsw
-      VIRTUAL_HOST: pma.fd3.flowdat.com
-    ports:
-      - 8080:80
-
-  grafana:
-    restart: always
-    image: grafana/grafana:master
-    links:
-     - jsonendpoint:endpoint
-     - mysql_jsonendpoint:endpoint
-     - mongodb_jsonendpoint:endpoint
-     - mysql:mysql
-    ports:
-     - 3000:3000
-    volumes:
-     - ./statsd/grafana/lib:/var/lib/grafana
-    environment:
-      VIRTUAL_HOST: grafana.fd3.flowdat.com
-      HTTPS_METHOD: nohttps
-      #LETSENCRYPT_HOST: grafana.fd3.flowdat.com
-      #LETSENCRYPT_EMAIL: andrade.luciano@gmail.com
-      GF_SECURITY_ADMIN_PASSWORD: "queRini6"
-      GF_INSTALL_PLUGINS: grafana-simple-json-datasource
-      GF_AUTH_ANONYMOUS_ORG_NAME: "Main Org."
-      GF_AUTH_ANONYMOUS_ORG_ROLE: 'Viewer'
-      GF_AUTH_ANONYMOUS_ENABLED: "true"
-
-  jsonendpoint:
-    restart: always
-    image: fd3_simple_json_endpoint
-    ports:
-      - 9003:8000
-    build:
-      context: ./extra/statsd/endpoint/json
-    links:
-        - mysql_jsonendpoint:mysql_jsonendpoint
-        - mongodb_jsonendpoint:mongodb_jsonendpoint
-    volumes:
-      - ./extra/statsd/endpoint/json:/opt/datasource
-    environment:
-      TIMEOUT: 60000
-
-  mysql_jsonendpoint:
-    restart: always
-    image: fd3_simple_json_endpoint_mysql
-    environment:
-      MYSQL_ROOT_PASSWORD: 235r2342gtfsw
-    links:
-      - mysql:mysql
-    ports:
-      - 9000:8000
-    build:
-      context: ./extra/statsd/endpoint/mysql
-    volumes:
-      - ./extra/statsd/endpoint/mysql:/opt/datasource
-
-  mongodb_jsonendpoint:
-    restart: always
-    image: fd3_simple_json_endpoint_mongo
-    links:
-      - mongodb:mongodb
-    ports:
-      - 9002:8000
-    build:
-      context: ./extra/statsd/endpoint/mongodb
-    volumes:
-      - ./extra/statsd/endpoint/mongodb:/opt/datasource
-
-  mongo_express:
-    image: mongo-express
-    ports:
-      - 8081:8081
-    links:
-      - mongodb:mongo
-
-  statsd:
-    restart: always
-    image: fd3-statsd-mysql-backend
-    build:
-      context: ./extra/statsd/statsd
-    ports:
-      - "8125:8125/udp"
-    links:
-      - mongodb:mongodb
-      - mysql:mysql
-    volumes:
-      - ./statsd/statsd/:/opt/config
-      - ./statsd/backend/mongodb/mongodb.js:/opt/statsd/backends/mongodb.js
-
-  supervisord:
-    restart: always
-    image: fd3-supervisord
-    build:
-      context: ./extra/supervisord
-    ports:
-      - "9001:9001"
-    privileged: true
-    env_file:
-     - host.env
-    links:
-      - mongodb:mongodb
-      - mysql:mysql
-      - nginx-proxy:geoserver.fd3.flowdat.com
-      - geoserver:geoserver
-    volumes:
-      - ./supervisord/:/etc/supervisord/
-      - ./supervisord/var/:/var/log/supervisor/
-      - ./supervisord/sshd_config:/etc/ssh/sshd_config
-      - ./supervisord/bin/fiberhome:/usr/bin/fiberhome
-      - ./supervisord/bin/fiberlink:/usr/bin/fiberlink
-    environment:
-      TERM: "xterm"
-
-  geoserver:
-    build:
-      context: ./extra/geoserver/
-    image: 'docker.infra.flowdat.com/fd3/geoserver:latest'
-    links:
-      - nginx-proxy:geoserver.fd3.flowdat.com
-    volumes:
-      - ./extra/geoserver/geoserver-data/styles:/opt/geoserver/data_dir/styles
-      - ./geoserver/geoserver-shapes:/var/www/shapes
-    ports:
-      - 8082:8080
-    restart: unless-stopped
-
-  nginx-proxy:
-        build:
-            context: ./extra/nginx/
-        image: 'docker.infra.flowdat.com/fd3/nginx:latest'
-        env_file:
-            - host.env
-        restart: always
-        ports:
-            - '80:80'
-            - '443:443'
-        volumes:
-            - '/var/run/docker.sock:/tmp/docker.sock:ro'
-            - './extra/nginx/certs:/etc/nginx/certs:ro'
-            - './extra/nginx/vhost.d:/etc/nginx/vhost.d'
-            - './extra/nginx/share:/usr/share/nginx/html'
-
-  redis:
-    image: redis:latest
-    restart: always
-
-  base_log_worker:
-    restart: always
-    image: fd3-base
-    build:
-      context: ./base
-    command: bin/console rabbitmq:consumer log_consumer
-    restart: always
-    links:
-      - mysql:mysql
-      - base:base
-      - amqp:amqp
-      - nginx-proxy:base.fd3.flowdat.com
-    environment:
-      HOST_BASE: base.fd3.flowdat.com
-      OAUTH_CLIENT_ID: 1_4gs3n2b9s7mso00kgogoks4k0ogk0ggs0w0k4k484gkowcg08k
-      OAUTH_CLIENT_SECRET: 60n93pmoh10c848wg0sc0844ow84sco0sc8gkockow4sg4sc0g
-      AMQP_KEY: base
-    volumes:
-      - ./base/:/opt/base/
-    env_file:
-      - host.env
-  
-  ftth_tasklogger_worker:
-    restart: always
-    image: fd3-ftth
-    build:
-      context: ./ftth
-    command: bin/console rabbitmq:consumer flowdat_tasklogger
-    restart: always
-    links:
-      - mysql:mysql
-      - base:base
-      - amqp:amqp
-      - nginx-proxy:base.fd3.flowdat.com
-    environment:
-      HOST_FTTH: ftth.fd3.flowdat.com
-      HOST_BASE: base.fd3.flowdat.com
-      OAUTH_CLIENT_ID: 1_4gs3n2b9s7mso00kgogoks4k0ogk0ggs0w0k4k484gkowcg08k
-      OAUTH_CLIENT_SECRET: 60n93pmoh10c848wg0sc0844ow84sco0sc8gkockow4sg4sc0g
-      AMQP_KEY: ftth
-    volumes:
-      - ./ftth/:/opt/ftth/
-    env_file:
-      - host.env
-  
-  cablemodem_tasklogger_worker:
-    restart: always
-    image: fd3-cablemodem
-    build:
-      context: ./cablemodem
-    command: bin/console rabbitmq:consumer flowdat_tasklogger
-    restart: always
-    links:
-      - mysql:mysql
-      - base:base
-      - amqp:amqp
-      - nginx-proxy:base.fd3.flowdat.com
-    environment:
-      HOST_CABLEMODEM: cablemodem.fd3.flowdat.com
-      HOST_BASE: base.fd3.flowdat.com
-      OAUTH_CLIENT_ID: 1_4gs3n2b9s7mso00kgogoks4k0ogk0ggs0w0k4k484gkowcg08k
-      OAUTH_CLIENT_SECRET: 60n93pmoh10c848wg0sc0844ow84sco0sc8gkockow4sg4sc0g
-      AMQP_KEY: cablemodem
-    volumes:
-      - ./cablemodem/:/opt/cablemodem/
-    env_file:
-      - host.env
-
-  ftth_command_worker:
-    restart: always
-    image: fd3-ftth
-    build:
-      context: ./ftth
-    command: bin/console rabbitmq:consumer command_consumer
-    restart: always
-    links:
-      - mysql:mysql
-      - base:base
-      - amqp:amqp
-      - nginx-proxy:base.fd3.flowdat.com
-    environment:
-      HOST_FTTH: ftth.fd3.flowdat.com
-      HOST_BASE: base.fd3.flowdat.com
-      OAUTH_CLIENT_ID: 1_4gs3n2b9s7mso00kgogoks4k0ogk0ggs0w0k4k484gkowcg08k
-      OAUTH_CLIENT_SECRET: 60n93pmoh10c848wg0sc0844ow84sco0sc8gkockow4sg4sc0g
-      AMQP_KEY: ftth
-    volumes:
-      - ./ftth/:/opt/ftth/
-    env_file:
-      - host.env
-
-  stats_command_worker:
-    restart: always
-    image: docker.infra.flowdat.com/fd3/stats:latest
-    build:
-      context: ./stats
-    command: bin/console rabbitmq:consumer command_consumer
-    restart: always
-    links:
-      - mysql:mysql
-      - base:base
-      - amqp:amqp
-      - nginx-proxy:base.fd3.flowdat.com
-      - geoserver:geoserver
-      - nginx-proxy:geoserver.fd3.flowdat.com
-    environment:
-      HOST_STATS: stats.fd3.flowdat.com
-      HOST_FTTH: ftth.fd3.flowdat.com
-      HOST_BASE: base.fd3.flowdat.com
-      OAUTH_CLIENT_ID: 1_4gs3n2b9s7mso00kgogoks4k0ogk0ggs0w0k4k484gkowcg08k
-      OAUTH_CLIENT_SECRET: 60n93pmoh10c848wg0sc0844ow84sco0sc8gkockow4sg4sc0g
-      AMQP_KEY: stats
-    volumes:
-      - ./stats:/opt/stats
-      - ./geoserver/geoserver-shapes:/var/www/shapes
-    env_file:
-      - host.env
-
-  cablemodem_command_worker:
-    restart: always
-    image: fd3-cablemodem
-    build:
-      context: ./cablemodem
-    command: bin/console rabbitmq:consumer command_consumer
-    restart: always
-    links:
-      - mysql:mysql
-      - base:base
-      - amqp:amqp
-      - nginx-proxy:base.fd3.flowdat.com
-    environment:
-      HOST_CABLEMODEM: cablemodem.fd3.flowdat.com
-      HOST_BASE: base.fd3.flowdat.com
-      OAUTH_CLIENT_ID: 1_4gs3n2b9s7mso00kgogoks4k0ogk0ggs0w0k4k484gkowcg08k
-      OAUTH_CLIENT_SECRET: 60n93pmoh10c848wg0sc0844ow84sco0sc8gkockow4sg4sc0g
-      AMQP_KEY: cablemodem
-    volumes:
-      - ./cablemodem/:/opt/cablemodem/
-    env_file:
-      - host.env

+ 2 - 0
tools/cmd.php

@@ -18,6 +18,8 @@ $app->add(new FD3\Command\ImportONUCommand());
 $app->add(new FD3\Command\MakeVersionCommand());
 $app->add(new FD3\Command\MakeSubversionCommand());
 $app->add(new FD3\ImportClient());
+$app->add(new FD3\UpdateFlowdatCommand());
+$app->add(new FD3\UpdateFlowdatModulesCommand());
 $app->add(new FD3\Command\ImportONUCommand());
 $app->add(new FD3\Command\TagVendorsCommand());
 $app->add(new FD3\Command\TagModulesCommand());

+ 2 - 2
tools/grafana.env

@@ -6,5 +6,5 @@ GF_DEFAULT_THEME=light
 GF_AUTH_ANONYMOUS_ORG_NAME="Main Org."
 GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer
 GF_AUTH_ANONYMOUS_ENABLED=true
-GF_DATABASE_URL="mysql://root:235r2342gtfsw@mysql:3306/grafana"
-GF_SERVER_ROOT_URL=http://${VIRTUAL_HOST}/
+GF_DATABASE_URL=mysql://root:235r2342gtfsw@mysql:3306/grafana
+GF_SERVER_ROOT_URL=http://grafana.${CLIENT}.flowdat.com/

+ 1 - 1
tools/playbook.yml

@@ -212,7 +212,7 @@
         executable: /bin/bash
 
     - name: Promote users to IKSOP
-      shell: " bin/console fos:user:promote iksop SUPER_ADMIN"
+      shell: " bin/console fos:user:promote iksop ROLE_SUPER_ADMIN"
       args:
         executable: /bin/bash
 

+ 5 - 3
tools/readme.md

@@ -168,6 +168,8 @@
 
 #PROCEDIMIENTOS PARA GENERAR BRANCH'S Y TAG'S   
 ##Branch y tag de módulos
+##### OBSERVACIONES: debemos tener funcionando los dockers para que se puedan ejecutar los composer update.
+
     Cuando me conecto al servidor, debo conectarme con un ssh -A ... para pasarle mis credenciales actuales.
     Primero debemos estar situados en el directorio /opt/flowdat/tools.
     Ahora debemos modificar los archivos "composer.json" de cada módulo y ajustarlo a la versión deseada. Este proceso ejecuta el composer update, por lo tanto se debe tener en cuenta que se debe ejecutar en alguna máquina que posea los dockers de los módulos creados.
@@ -175,9 +177,9 @@
         Nos situamos en el directorio
             cd /opt/flowdat
         Ejecuto el dind pasando mis credenciales actuales al docker. Tomar como precaución, que debo tener cargada la de bitbucket de escritura
-            docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock -v "$SSH_AUTH_SOCK:/tmp/ssh_auth_sock" -e "SSH_AUTH_SOCK=/tmp/ssh_auth_sock" dind bash
-        Como el dind carga las variables por el entrypoint, entoces tengo que ejecuar un export para que me tome las keys de la maquina origen
-            export SSH_AUTH_SOCK=/tmp/ssh_auth_sock
+            docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind bash
+        Cargar la key para escribir en bitbucket. Sino posee una, se puede cargar de la siguiente forma.
+            eval $(ssh-agent); ssh-add /opt/flowdat/keys/gogs.drone.id_rsa
         Ejecuto la sentencia para cambiar el composer y actualizar el fuente
             php cmd.php composer:require ../modules.ini ik/* vX.Y.Z --composer_update=true --pull=master
         Una vez finalizado la generación de los composer json/lock, debemos hacer un commit de los cambios y para esto ejecutamos la sentencia

+ 3 - 0
tools/repositories.ini

@@ -64,6 +64,9 @@ repo = "ssh://git@bitbucket.org/ikflowdat/templatebundle.git"
 [webservice]
 repo = "ssh://git@bitbucket.org/ikflowdat/webservice.git"
 
+[tr069]
+repo = "ssh://git@bitbucket.org/ikflowdat/tr069bundle.git"
+
 [workflowbundle]
 repo = "ssh://git@bitbucket.org/ikflowdat/workflowbundle.git"
 

+ 3 - 3
tools/src/Command/TagModulesCommand.php

@@ -85,7 +85,7 @@ class TagModulesCommand extends Command
 
 		    $output->writeln('Commit de los composer');
                     $command = $cd_path . "; git commit -am 'Composer para la version " . $version . " y el tag " . $tag . "'";
-                    $output->writeln('\t' . $command);
+                    $output->writeln("\t" . $command);
                     shell_exec($command);
 		    
 		    // cambio a la rama de la version y agrego los archivos modificados
@@ -97,7 +97,7 @@ class TagModulesCommand extends Command
 		    
                     $output->writeln('Push de la rama ' . $version);
 		    $command = $cd_path . "; git push " . $optionRemoteGit . " " . $version;
-		    $output->writeln('\t' . $command);
+		    $output->writeln("\t" . $command);
                     shell_exec($command);
                     // estoy creando un tag
                     $tags = $git->tag();
@@ -115,7 +115,7 @@ class TagModulesCommand extends Command
                     // ejecuto el comando git
                     $output->writeln('Push de la rama.');
 		    $command = $cd_path . "; git push " . $optionRemoteGit . " --tags ";
-                    $output->writeln('\t' . $command);
+                    $output->writeln("\t" . $command);
 		    // tengo que hacer el  --tags para que pase todos los tags
                     shell_exec($command);
                 } catch (GitException $e) {

+ 1 - 0
tools/src/Command/TagVendorsCommand.php

@@ -97,6 +97,7 @@ class TagVendorsCommand extends Command
                     }
                     // ejecuto el comando git
                     shell_exec($cmd);
+		    sleep(5);
                 } catch (GitException $e) {
                     $output->writeln($e->getTraceAsString());
                     $output->writeln($sec . ": " . $e->getMessage());

+ 5 - 1
tools/src/ComposerRequireCommand.php

@@ -75,7 +75,11 @@ class ComposerRequireCommand extends Command
 		        $output->writeln('Composer update');
 		        $command = 'docker-compose exec ' . $sec . ' bin/composer-update.sh';
 		        $output->writeln("\t" . $command);
-                        shell_exec($command);
+			$resp = shell_exec($command);
+			if ($resp) {
+			    $output->writeln("\tSalida comando."); 
+			    $output->writeln("\t\t" . $resp); 
+			}
                     }
 		} catch (Throwable $t) {
 		    $output->writeln('Se produjo un error. Reestableciendo datos.');

+ 24 - 1
tools/src/Release.php

@@ -772,7 +772,7 @@ class Release extends Command
 
         $composer
             ->addService($module)
-            ->image("grafana/grafana:3.1.1")
+            ->image("grafana/grafana:5.0.4")
             ->addLinks("mysql")
             ->restart($this->_docker_restart_default)
             ->addEnv_file("running.env")
@@ -950,6 +950,26 @@ class Release extends Command
             ->addPorts(8081, 8080);
     }
 
+    /**
+     * @param FileFormat2 $composer
+     * @param array $config
+     */
+    public function addKea(FileFormat2 $composer, $config = array())
+    {
+        $version = "latest";
+        $registry = "";
+        extract($config);
+
+        $composer
+            ->addService("kea")
+            ->image($registry . "fd3/kea:" . $version)
+            ->build("./extra/kea/")
+            ->restart($this->_docker_restart_default)
+            ->addEnv_file("running.env")
+            ->addEnv_file("host.env")
+            ;
+    }
+
 
     function getDockerComposer($version = "latest", $host_env_file = "host.env", $registry = "docker.infra.flowdat.com/")
     {
@@ -996,6 +1016,9 @@ class Release extends Command
         // Geoserver
         $this->addGeoserver($composer, $base_vars);
 
+        // Kea
+        $this->addKea($composer, $base_vars);
+
         $this->_dObj->file("docker-compose.yml")->content($composer->render());
 
         // escribo un archivo inventory.ini por defecto para no tener que lanzar los docker

+ 71 - 0
tools/src/UpdateFlowdatCommand.php

@@ -0,0 +1,71 @@
+<?php
+
+namespace FD3;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class UpdateFlowdatCommand extends Command
+{
+    protected function configure()
+    {
+        $this
+            ->setName('ik:update:installer')
+            ->setDescription('Update flowdat to some release.')
+            ->setHelp('Update flowdat to some release.')
+	    ->addArgument('version', InputArgument::REQUIRED, 'Use the version expression. Ex. v0.2.1')
+	    ->addArgument('sudo', InputArgument::OPTIONAL, 'Run as sudo?.", "FALSE')
+            ->addArgument('remote', InputArgument::OPTIONAL, 'Remote repository.', 'origin')
+	    ->addArgument('tag', InputArgument::OPTIONAL, 'If release is tag then true.', 'TRUE')
+            ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $version = $input->getArgument("version");
+	$sudo = strtolower($input->getArgument("sudo")) === 'true' ? "sudo " : "";
+        $remote = $input->getArgument("remote");
+	$tag  = strtolower($input->getArgument("tag")) === 'true';
+
+        if (substr($version, 0, 1) === 'v') {
+            $values = explode('.', $version);
+            unset ($values[count($values) - 1]);
+            $versionOnly = implode ('.', $values);
+        } else {
+            $versionOnly = $version;
+        }
+
+        $realpath = realpath(".");
+        $dir = dirname($realpath);
+
+        $dirBackup = $dir . "-backup";
+	if (!file_exists($dirBackup)) {
+	    $output->writeln("Creating directory " . $dirBackup);
+	    mkdir($dirBackup,  777);
+	}
+        /**
+	 * EN CASO DE ERROR Y QUE TENGA QUE VOLVER EL SISTEMA ATRAS, TENGO QUE TENER EN CUENTA CON LOS DIRECTORIOS mysql, mongo y extra. 
+	 * PORQUE EL SISTEMA ORIGINAL SIGUE ADELANTE MIENTRAS SE ACTUALIZA Y PUEDEN QUEDAR DESACTUALIZADAS LAS BASES DE DATOS Y 
+	 * DEMAS YERBAS.
+	 */ 
+	$output->writeln("Backup files on " . $dirBackup);
+	$command = $sudo . "cp -rf " . $dir . " " . $dirBackup;
+	$output->writeln("\t" . $command);
+	$resp = shell_exec ($command);
+	$output->writeln($resp);
+
+	if ($tag) {
+            $command = 'git stash && git checkout -B ' . $versionOnly . ' && git fetch ' . $remote .
+                       ' ' . $versionOnly . ':refs/tags/' . $versionOnly . ' && git merge -X theirs ' . $version;
+        } else {
+            $command = 'git stash && git checkout -B ' . $versionOnly . ' && git fetch ' . $remote . ' ' . $version;
+        }
+        $output->writeln("\t" . $command);  
+	$resp = shell_exec ($command);
+        $output->writeln($resp);  
+    }
+}
+

+ 101 - 0
tools/src/UpdateFlowdatModulesCommand.php

@@ -0,0 +1,101 @@
+<?php
+
+namespace FD3;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class UpdateFlowdatModulesCommand extends Command
+{
+    protected function configure()
+    {
+        $this
+            ->setName('ik:update:modules')
+            ->setDescription('Update flowdat modules to some release.')
+            ->setHelp('Update flowdat modules to some release.')
+            ->addArgument('ini_module_file', InputArgument::REQUIRED, 'The ini file from where to get the source code config.')
+	    ->addArgument('version', InputArgument::REQUIRED, 'Use the version expression.')
+	    ->addArgument('remote', InputArgument::OPTIONAL, 'Remote repository.', 'origin')
+	    ->addArgument('tag', InputArgument::OPTIONAL, 'If release is tag then true.', 'TRUE')
+            ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $file = $input->getArgument("ini_module_file");
+        $version = $input->getArgument("version");
+        $remote = $input->getArgument("remote");
+        $tag  = strtolower($input->getArgument("tag")) === 'true';
+
+	if ($tag) {
+            if (substr($version, 0, 1) === 'v') {
+                $values = explode('.', $version);
+                unset ($values[count($values) - 1]);
+                $versionOnly = implode ('.', $values);
+            } else {
+                $versionOnly = $version;
+            }
+	} else {
+            $versionOnly = $version;
+	}
+
+        $realpath = realpath($file);
+        $dirname = dirname($realpath);
+        if (!chdir($dirname)) {
+            throw new \Exception("Can't change working directory to " . $dirname);
+        }
+
+        $realpathModule = realpath(".");
+        $dirnameModule = dirname($realpathModule);
+	
+	$content = parse_ini_file($realpath, true);
+	$error = '';
+	$content['extra'] = [];
+	foreach ($content as $sec => $conf) {
+	    try {
+                $output->writeln('-------------------------------------------------------------------------------------');    
+	        $output->writeln('Module: ' . $sec);    
+	        if ($tag) {
+                    $command = 'cd ' . $sec . ' && git stash && git checkout -B ' . $versionOnly . ' && git fetch ' . $remote . 
+	                       ' ' . $versionOnly . ':refs/tags/' . $versionOnly . ' && git merge -X theirs ' . $version;    
+                } else {
+                    $command = 'cd ' . $sec . ' && git stash && git checkout -B ' . $versionOnly . ' && git fetch ' . $remote . ' ' . $version;
+                }
+                $output->writeln("\tComando: " . $command);  
+                $resp = shell_exec ($command);
+		$output->writeln($resp);
+		// se reemplaza por docker-compose up --force-recreate
+                //if (count($conf) > 0) {
+	        //    $command = "docker-compose exec " . $sec . " bin/composer-install.sh";
+                //    $output->writeln("\tComando: " . $command);  
+                //    $resp = shell_exec ($command);
+	        //    $output->writeln($resp);
+		//}
+	    } catch (\Throwable $t) {
+		$error .= $t->getTraceAsString() . "\n";
+            }  
+	}
+
+	$command = "docker-compose up -d --force-recreate";
+        $output->writeln("\tComando: " . $command);  
+        $resp = shell_exec ($command);
+	$output->writeln($resp);
+        
+	sleep(600);
+	$command = "docker-compose stop nginx; sleep 20; docker-compose up -d --force-recreate nginx";
+	$output->writeln("\tComando: " . $command);
+	shell_exec ($command);
+
+	if (strlen($error) > 0) {
+            $output->writeln("SE PRODUJERON LOS SIGUIENTES ERRORES: \n" . $error);
+	    /**
+	     * SE PUEDEN PARAR LOS DOCKERS, BORRAR LOS DIRECTORIOS DE LOS MÓDULOS Y COPIARLOS DESDE EL BACKUP.
+	     * TENER CUIDADO CON LOS DIRECTORIOS mysql, mongo y extra PORQUE PUEDE AVANZAR DESDE EL BACKUP.
+	     */ 
+        }
+    }
+}
+