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

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

Fernando Alonso пре 7 година
родитељ
комит
9c035fb4a3
12 измењених фајлова са 420 додато и 112 уклоњено
  1. 80 90
      .drone.yml
  2. 14 0
      certs/README
  3. 35 0
      certs/cert.pem
  4. 27 0
      certs/chain.pem
  5. 62 0
      certs/fullchain.pem
  6. 28 0
      certs/privkey.pem
  7. 7 0
      tools/installer.sh
  8. 31 3
      tools/playbook.yml
  9. 28 4
      tools/readme.md
  10. 5 1
      tools/src/Command/TagVendorsCommand.php
  11. 102 13
      tools/src/Release.php
  12. 1 1
      tools/user_system.json

+ 80 - 90
.drone.yml

@@ -1,96 +1,86 @@
-services:
-  selenium:
-    image: selenium/standalone-firefox-debug:3.1
-  docker:
-    image: docker:17.10-dind
-    privileged: true
-    command: [ "--storage-driver=vfs", "--tls=false" ]
+#services:
+#  selenium:
+#    image: selenium/standalone-firefox-debug:3.1
+#  docker:
+#    image: docker:17.10-dind
+#    privileged: true
+#    command: [ "--storage-driver=vfs", "--tls=false" ]
 
 pipeline:
-  docker_installer:
-   environment:
-      - DIR_INSTALL=/opt/installer
-   repo : docker.infra.flowdat.com/fd3/installer
-   image: plugins/docker
-   email: luciano@interlink.com.ar
-   registry: docker.infra.flowdat.com
-   dockerfile: tools/Dockerfile
-   build_args:
-      - DIR_INSTALL=/opt/installer
-   context: tools/
-   tag:
-     - latest
-   when:
-    event: [push]
-
-  installer_branch:
-    image: docker.infra.flowdat.com/fd3/sf-php:latest
+  build:
+    image: python:2.7
     commands:
-      - chmod 0600 keys/*
-      - eval $(ssh-agent); ssh-add keys/gogs.drone.id_rsa
-      - cd tools
-      - composer install --no-interaction --no-progress
-      - php cmd.php make:tag:vendors repositories.ini ${DRONE_BRANCH} --branch=true
-    when:
-       event: [ push ]
-       branch: v*
+      - START=$(date +%s)
+      - echo $START
+      - export CLIENT=fd3
+      - apt update 
+      - apt install netcat -yq
+      #- pip install --upgrade pip ansible==2.2.0 markupsafe ecdsa pyOpenSSL;
+      # - curl -OL https://github.com/digitalocean/doctl/releases/download/v1.8.0/doctl-1.8.0-linux-amd64.tar.gz
+      # - tar xf doctl-1.8.0-linux-amd64.tar.gz
+        #- ./doctl auth init -t 083d19437d43fc51983c8926e5060bdb5039032e7d2a933395b2513573c799d3
+        #- ID=$(./doctl compute droplet create test-installer-fd3 --wait --format "ID" --size s-6vcpu-16gb --image debian-9-x64 --region nyc3 --ssh-keys b4:2b:5f:4c:0c:be:6e:77:50:85:96:ca:70:55:db:aa --tag-names test,fd3-test,installer | tail -1)
+        #- echo $ID
+        #- ./doctl compute droplet get $ID --format "PublicIPv4" --no-header > dd.id
+      - FD3IP=165.227.7.103
+        #- timeout 30 sh -c 'until nc -z $0 $1; do sleep 1; done' $FD3IP 22
+#ssh con IP doctl
+      - chmod 0600 tools/keys/bitbucket.id_rsa
+      - eval $(ssh-agent) ; ssh-add tools/keys/bitbucket.id_rsa
+      - ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP apt-get update
+      
+      - ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP apt-get install curl git python python-pip -yq
+      - ssh root@$FD3IP 'ssh-keyscan -H -p 22  bitbucket.org >> ~/.ssh/known_hosts'
+      #- ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP curl https://bootstrap.pypa.io/get-pip.py | python
+      #- curl -fsSL get.docker.com | ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP 
+      - ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP 'pip install docker-compose'
 
-  installer_tag:
-    image: docker.infra.flowdat.com/fd3/sf-php:latest
-    commands:
-      - chmod 0600 keys/*
-      - eval $(ssh-agent); ssh-add keys/gogs.drone.id_rsa
-      - cd tools
-      - composer install --no-interaction --no-progress
-      - php cmd.php make:tag:vendors repositories.ini ${DRONE_TAG}
-    when:
-       event: [ tag ]
+#      - ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP 'curl -sSL https://agent.digitalocean.com/install.sh | sh'
+
+####. Crear un directorio para la instalación, puede ser en cualquier lugar del sistema. Tener en cuenta que en este directorio se descargará código fuente.
+      - ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP 'docker stop $(docker ps -qa) || exit 0'
+
+####. Descargar el fuente de instalación.   
+#- ssh -A -o StrictHostKeyChecking=no root@$FD3IP git clone git@bitbucket.org:ikflowdat/installer.git /opt/installer
+      - ssh -A -o StrictHostKeyChecking=no root@$FD3IP rm -rf /opt/flowdat
+      - ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP rm -rf /opt/flowdat /opt/installer/
+      - ssh -A -o StrictHostKeyChecking=no root@$FD3IP mkdir -p /opt/installer
+      - ssh -i bitbucket.id_rsa -o StrictHostKeyChecking=no root@$FD3IP mkdir /opt/flowdat
+      - scp -r -o StrictHostKeyChecking=no tools root@$FD3IP:/opt/installer/
+
+####. Construir el docker que se utilizará durante la instalación.
+      - ssh -o StrictHostKeyChecking=no root@$FD3IP 'cd /opt/installer/tools; docker build --build-arg DIR_INSTALL=$(pwd) -t dind .'
+
+####. Instalamos con composer elementos adicionales.
+#      - ssh -o StrictHostKeyChecking=no root@$FD3IP docker run -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind composer install
+
+####. Crear los archivos necesarios para la instalción. Dentro del directorio actual se crea un nuevo directorio con el nombre de la empresa.
+      - ssh -o StrictHostKeyChecking=no root@$FD3IP 'docker run -v /opt/flowdat:/opt/flowdat -v /var/run/docker.sock:/tmp/docker.sock dind make:install /opt/flowdat --client=fd3'
+
+####. Una vez dentro del docker entramos al directorio de instalación. Obtener los fuentes desde bitbucket
+      - ssh -o StrictHostKeyChecking=no root@$FD3IP 'cd /opt/flowdat ; docker run -v /opt/flowdat:/opt/flowdat -v /var/run/docker.sock:/tmp/docker.sock dind get:source $(pwd)/git.ini --timeout=120'
+      - echo "get:source DONE!"
+
+####. Renombramos los archivos innecesarios para el nginx.    
+      #- ssh -o StrictHostKeyChecking=no root@$FD3IP 'docker run -v /opt/flowdat:/opt/flowdat -v /var/run/docker.sock:/tmp/docker.sock dind fix:nginx /opt/flowdat'
+
+####. Entramos al docker para correr ansible y terminar la configuración. Una vez dentro del docker entramos al directorio de instalación. Corremos ansible para finalizar la configuración e instalación
+      - scp -o StrictHostKeyChecking=no tools/installer.sh root@$FD3IP:/opt/flowdat
+      - ssh -o StrictHostKeyChecking=no root@$FD3IP 'docker run -v /opt/flowdat:/opt/flowdat -v /var/run/docker.sock:/tmp/docker.sock -w /opt/flowdat --entrypoint=./installer.sh dind'
+
+### Compose UP
+      - ssh -o StrictHostKeyChecking=no root@$FD3IP 'cd /opt/flowdat ; docker-compose up -d'
+
+### Los container se levantan por systemctl. Ejecutar fuera del dind
+#      - ssh -o StrictHostKeyChecking=no root@$FD3IP ln -sf /opt/flowdat/docker-compose.service /etc/systemd/system/docker-compose.service
+#      - ssh -o StrictHostKeyChecking=no root@$FD3IP systemctl enable docker-compose.service
+
+      - ssh -o StrictHostKeyChecking=no root@$FD3IP 'cd /opt/flowdat ; docker-compose up -d'
+      - ssh -o StrictHostKeyChecking=no root@$FD3IP 'cd /opt/flowdat ; docker-compose ps'
+      - ssh -o StrictHostKeyChecking=no root@$FD3IP 'cd /opt/flowdat ; docker-compose rm -sf'
 
-  #build:
-  #  image: debian:9.0
-  #  commands:
-  #    - echo "Acquire::http::Proxy \"http://200.50.168.30:3142\";" | tee /etc/apt/apt.conf.d/00aptproxy
-  #    - apt-get update && apt-get install -yq git curl imagemagick php-cli php-curl php-mbstring php-imagick php-xml
-  #    - which compare
-  #    - env
-  #    - pwd
-  #    - ls -lash
-  #    - cd behat/testScreenshotGalvez ; php ./vendor/bin/codecept run --steps tests/acceptance/
+      - END=$(date +%s);
+      - echo $((END-START)) | awk '{print int($1/60)":"int($1%60)}'
+#      - ./doctl compute droplet delete -f $ID
+      - exit 0
 
-  #install:
-  #  image: docker.infra.flowdat.com/fd3/sf-php:latest
-  #  environment:
-  #    - DOCKER_HOST=tcp://0.0.0.0:2375
-  #  commands:
-  #    - apt-get update && apt-get  install -yq php-gmp
-  #    - apt-get update && apt-get install -yq lsb-release time
-  #    - . /etc/os-release; echo $ID
-  #    - lsb_release -cs
-  #    - env
-  #    - php -v
-  #    - apt-get update && apt-get install -yq apt-transport-https ca-certificates curl gnupg2 software-properties-common
-  #    - curl -fsSL https://download.docker.com/linux/$ID/gpg | apt-key add -
-  #    - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$ID $(lsb_release -cs) stable"
-  #    - apt-get update && apt-cache madison docker-ce
-  #    - apt-get update && apt-get -yq install docker-ce=17.06.0~ce-0~debian
-  #    - apt-get update && apt-get  install -yq python-pip
-  #    - docker --tls=false ps -a
-  #    - pip install docker-compose
-  #    - docker-compose -v
-  #    - echo "Hasta aqui es instalación de paquetes requeridos docker y docker-compose"
-  #    - cd tools 
-  #    - chmod 0600 keys/bitbucket.id_rsa*
-  #    - eval $(ssh-agent) ; ssh-add keys/bitbucket.id_rsa
-  #    - composer install --no-interaction --no-progress -vvv
-  #    - rm -rf demo
-  #    - php cmd.php make:install demo
-  #    - ping bitbucket.org -c4
-  #    - cd demo 
-  #    - php ../cmd.php get:source git.ini
-  #    - cat docker-compose.yml
-  #    - docker-compose config
-  #    - time docker-compose build
-  #    - docker-compose up -d
-  #    - docker-compose ps 
-  #    - "curl -H 'Host: base.fd3.flowdat.com' 127.0.0.1"
- 

+ 14 - 0
certs/README

@@ -0,0 +1,14 @@
+This directory contains your keys and certificates.
+
+`privkey.pem`  : the private key for your certificate.
+`fullchain.pem`: the certificate file used in most server software.
+`chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
+`cert.pem`     : will break many server configurations, and should not be used
+                 without reading further documentation (see link below).
+
+WARNING: DO NOT MOVE THESE FILES!
+         Certbot expects these files to remain in this location in order
+         to function properly!
+
+We recommend not moving these files. For more information, see the Certbot
+User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

+ 35 - 0
certs/cert.pem

@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGHzCCBQegAwIBAgISA6KYMz8mGnlevBz9BN7tpkaWMA0GCSqGSIb3DQEBCwUA
+MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
+ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA1MjkxMzUxMjFaFw0x
+ODA4MjcxMzUxMjFaMBwxGjAYBgNVBAMMESouZmQzLmZsb3dkYXQuY29tMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ug4jH8Nw2ETdhB3E0MpajVPA57U
+oh9oJAl43s1v7jotbyH3HJWxdGCsXrqI5CEpy1dbgrXGQm2u/9BypD1656rtc6OE
+7UPSi0fuyu4h8vnZIl8+P0EZiIhlo8U5yeASbIf4yn8tVZhvh+IzDL9Eocewbo1b
+S5QNK5GtwygGySXUVtarHXkJ/1QS0tvX7Jx85FQgUucxNjxM6VcF394/qWfad0vM
+Rvuh/S3Vl9uZA6ytA1HkotjkJhB3Fz6D8WYfGfpt8+7fFjPAspcbhvqtQbLeH9Jg
+1W9I3sjzNCFVOTGt3x3IEk3Er2lv8ImL7Y1otfaxBTiL3B4U2Nb/brs/TwIDAQAB
+o4IDKzCCAycwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
+BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQWFPgLYG/uLzPywin1nLkv
+9VKlWzAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcB
+AQRjMGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlw
+dC5vcmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlw
+dC5vcmcvMC0GA1UdEQQmMCSCESouZmQzLmZsb3dkYXQuY29tgg9mZDMuZmxvd2Rh
+dC5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHW
+MCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB
+BQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1
+cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdp
+dGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNl
+bmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB3
+ANt0r+7LKeyx/so+cW0s5bmquzb3hHGDx12dTze2H79kAAABY6xh0b8AAAQDAEgw
+RgIhALZlL8AyobvsCpqrr5WtexP3u8dGzRpUd/Ae9PyhlfWpAiEA7x+hKs7SCrfP
+dJhcyjXmK1lqShb42Ye7XYXruyg1YJ0AdgApPFGWVMg5ZbqqUPxYB9S3b79Yeily
+3KTDDPTlRUf0eAAAAWOsYdHkAAAEAwBHMEUCIQCwlt4TDjfdIdeFzhFzUua7HQh7
+g2pQnlvzKE4ZVAOprAIgUMUakODT0/BuNHXBYDCR0QuzrG3UoJ/fF+2ZmxWful8w
+DQYJKoZIhvcNAQELBQADggEBAFMytK5JgcChkFUZfALqBr6Wr69SEWaG+PU6l18B
+cvZiwLSQBM31d229u4H0InUYkFTw7wyDZGAJiAcURzBmanTRLDwHkq7FEmoPeEiO
+TZtatfx3MoqK6RK/613bA4jmbOcpT7i0P6Y0RUbRs7tTkAlDPas9vUzReQwnbriS
+klA4ZxtUFjukUtNICEs5OVbH6y1tBEnzSJidDr9sUa7giwYkDvJm5E6kXwe7tEI9
+VECgbqaTA1EX3HVnCLADr1hKqnrxuu42zs07GjSUCWC2hbtnw1tW8zHN26hqqu/m
+HtXbzWAv1hBauWc49mgQWiLOoN1szTSFdPDRMxgDa+n4P70=
+-----END CERTIFICATE-----

+ 27 - 0
certs/chain.pem

@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
+SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
+GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
+q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
+SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
+Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
+a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
+/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
+AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
+CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
+bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
+c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
+VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
+ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
+MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
+Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
+AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
+uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
+wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
+X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
+PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
+KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
+-----END CERTIFICATE-----

+ 62 - 0
certs/fullchain.pem

@@ -0,0 +1,62 @@
+-----BEGIN CERTIFICATE-----
+MIIGHzCCBQegAwIBAgISA6KYMz8mGnlevBz9BN7tpkaWMA0GCSqGSIb3DQEBCwUA
+MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
+ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA1MjkxMzUxMjFaFw0x
+ODA4MjcxMzUxMjFaMBwxGjAYBgNVBAMMESouZmQzLmZsb3dkYXQuY29tMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ug4jH8Nw2ETdhB3E0MpajVPA57U
+oh9oJAl43s1v7jotbyH3HJWxdGCsXrqI5CEpy1dbgrXGQm2u/9BypD1656rtc6OE
+7UPSi0fuyu4h8vnZIl8+P0EZiIhlo8U5yeASbIf4yn8tVZhvh+IzDL9Eocewbo1b
+S5QNK5GtwygGySXUVtarHXkJ/1QS0tvX7Jx85FQgUucxNjxM6VcF394/qWfad0vM
+Rvuh/S3Vl9uZA6ytA1HkotjkJhB3Fz6D8WYfGfpt8+7fFjPAspcbhvqtQbLeH9Jg
+1W9I3sjzNCFVOTGt3x3IEk3Er2lv8ImL7Y1otfaxBTiL3B4U2Nb/brs/TwIDAQAB
+o4IDKzCCAycwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
+BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQWFPgLYG/uLzPywin1nLkv
+9VKlWzAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcB
+AQRjMGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlw
+dC5vcmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlw
+dC5vcmcvMC0GA1UdEQQmMCSCESouZmQzLmZsb3dkYXQuY29tgg9mZDMuZmxvd2Rh
+dC5jb20wgf4GA1UdIASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHW
+MCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYB
+BQUHAgIwgZ4MgZtUaGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1
+cG9uIGJ5IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdp
+dGggdGhlIENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNl
+bmNyeXB0Lm9yZy9yZXBvc2l0b3J5LzCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB3
+ANt0r+7LKeyx/so+cW0s5bmquzb3hHGDx12dTze2H79kAAABY6xh0b8AAAQDAEgw
+RgIhALZlL8AyobvsCpqrr5WtexP3u8dGzRpUd/Ae9PyhlfWpAiEA7x+hKs7SCrfP
+dJhcyjXmK1lqShb42Ye7XYXruyg1YJ0AdgApPFGWVMg5ZbqqUPxYB9S3b79Yeily
+3KTDDPTlRUf0eAAAAWOsYdHkAAAEAwBHMEUCIQCwlt4TDjfdIdeFzhFzUua7HQh7
+g2pQnlvzKE4ZVAOprAIgUMUakODT0/BuNHXBYDCR0QuzrG3UoJ/fF+2ZmxWful8w
+DQYJKoZIhvcNAQELBQADggEBAFMytK5JgcChkFUZfALqBr6Wr69SEWaG+PU6l18B
+cvZiwLSQBM31d229u4H0InUYkFTw7wyDZGAJiAcURzBmanTRLDwHkq7FEmoPeEiO
+TZtatfx3MoqK6RK/613bA4jmbOcpT7i0P6Y0RUbRs7tTkAlDPas9vUzReQwnbriS
+klA4ZxtUFjukUtNICEs5OVbH6y1tBEnzSJidDr9sUa7giwYkDvJm5E6kXwe7tEI9
+VECgbqaTA1EX3HVnCLADr1hKqnrxuu42zs07GjSUCWC2hbtnw1tW8zHN26hqqu/m
+HtXbzWAv1hBauWc49mgQWiLOoN1szTSFdPDRMxgDa+n4P70=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
+SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
+GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
+q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
+SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
+Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
+a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
+/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
+AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
+CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
+bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
+c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
+VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
+ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
+MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
+Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
+AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
+uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
+wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
+X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
+PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
+KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
+-----END CERTIFICATE-----

+ 28 - 0
certs/privkey.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDS6DiMfw3DYRN2
+EHcTQylqNU8DntSiH2gkCXjezW/uOi1vIfcclbF0YKxeuojkISnLV1uCtcZCba7/
+0HKkPXrnqu1zo4TtQ9KLR+7K7iHy+dkiXz4/QRmIiGWjxTnJ4BJsh/jKfy1VmG+H
+4jMMv0Shx7BujVtLlA0rka3DKAbJJdRW1qsdeQn/VBLS29fsnHzkVCBS5zE2PEzp
+VwXf3j+pZ9p3S8xG+6H9LdWX25kDrK0DUeSi2OQmEHcXPoPxZh8Z+m3z7t8WM8Cy
+lxuG+q1Bst4f0mDVb0jeyPM0IVU5Ma3fHcgSTcSvaW/wiYvtjWi19rEFOIvcHhTY
+1v9uuz9PAgMBAAECggEBALfoLN8+LwcukCTEaMDQML3fLD4w8qNIFaxO4ioOI8ss
+yc99Y5h2Y53iaovTxmh/Do20aCSLUw07zXxeDIlw3spCfvn2HYQzPtWa7PvhOJNC
+EHfra0EHCDfJEDAFW8XP8ODYlDYnPaXE3YQ012UHJ9aWZR+RfYli2TUju8xQC9K6
+54khHuhjprI3Lg6LYkOnpBdhVCFywe0jevyp4NK9/Loa5H2W0GNhlx9IJsPi4K7Y
+GnjrEphxfB1rriUgJd5f/WqYhTaYV/ODj0Ut5lyVlutBn6RjsYrm7KBaZJXnH0qm
+/EP9Y3633I0/S2fRSrsceJfNwrK01uEsqG6bAaWE7uECgYEA73QEr2vfO1yl4tVC
+aC626GSLcIFi4Wf7Yz1G5XrAtHR48G8xKX4eIJ9t+z56ZMu8JMw82WKY6bqBezvt
+Tvfx0TnCQ0JoZ3eB//15UWeeCuudIqtn6ZnQNoahEJIzNHoIcjSKJjOGXXy1g4n2
+jvvAQd07vPqm+NWK/zMJhYuGb/8CgYEA4Xs3Qm87Xum4O/GRyBXVT5/CCohotxuC
+Gtzfx5rj6SCSAxNK/DBpvUO3gKp2ov0av0QLP8OOy6ux6Mh6lxclb5wTKl7Sz9or
+MFMBmLWjIzHfjRAsNSDNz2qxTv110QAkWcB+KLeJDcUSikuYLXQAkh7CbFKs8m3k
+MNslB744MLECgYADJVYOa+9h20S+pyiZL8vtX6zJTJnc9j3CPwLYbvVrKYCRQBS4
+Q9TnftC2FUsMWfTd0uUVwgraPz4GPXJPsEg4BHc95Ph0K4jEsTLP0/mqkQ/ebbwO
+wJuQq9If4pvTm6rSvUf3WoPwZHwJ/10C4eHTu7FWOUDKUhviYGxGmd+pRwKBgB2g
+VfNpsBBZfzaJGBGFJODwact+ftvIRoEHEnQkmtuPxv+WclzOc6ZFln/WZf4maXRG
+GYBITqPeLGMcrFbb2LRgengvu11KGjCgR25sN0IxlGDxhg15APHG4AMz9F4AucX9
+L9ZjvyNLCJOZOSaHvmd0mTEob8buv3PX53ar/LARAoGBANIZlgfzKL5Cr1wQyBsM
+3W7Qfme09Qj9J2E1P2M+GakFAxOb10fDmD5JMRvsMOX2lZv4BqTAXYJMXQP6Z87t
+YatCpo8UGyu0lXIRWvrEWIXJJj8JQ0bydEn5VMOX2gyK7pMzENnhbTkHUl98vsUt
+X9iv5cUo5V9jdSa/uH6639eu
+-----END PRIVATE KEY-----

+ 7 - 0
tools/installer.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+export $(cat mysql.host.env)
+export $(cat running.env)
+env
+ansible-playbook -i inventory.ini -u root playbook.yml
+

+ 31 - 3
tools/playbook.yml

@@ -4,12 +4,15 @@
   connection: local
   tasks:
     - name: Parameters for base
-      command: "cp {{ playbook_dir }}/base/app/config/parameters.yml.docker {{ playbook_dir }}/base/app/config/parameters.yml"
+      command: "cp {{ playbook_dir }}/base/app/config/parameters.yml.dist {{ playbook_dir }}/base/app/config/parameters.yml"
 
     - name: "Parameters"
-      command: "cp {{ playbook_dir }}/{{ item }}/app/config/parameters.yml.docker {{ playbook_dir }}/{{ item }}/app/config/parameters.yml"
+      command: "cp {{ playbook_dir }}/{{ item }}/app/config/parameters.yml.dist {{ playbook_dir }}/{{ item }}/app/config/parameters.yml"
       with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
 
+    - name: Parameters for base
+      command: "cp {{ playbook_dir }}/kea/conf/kea-dhcp4.conf.dist {{ playbook_dir }}/kea/conf/kea-dhcp4.conf"
+
 - name: Launch docker for mysql database. Tag=start_mysql
   hosts: 127.0.0.1
   connection: local
@@ -187,7 +190,12 @@
 
     - name: Load redirections
       set_fact:
-        uris: "{{ uris }} --redirect_uri=http://{{ item }}.{{ lookup('env', 'CLIENT') }}.flowdat.com/login_check"
+        uris: "{{ uris }} --redirect_uri=https://{{ item }}.{{ lookup('env', 'CLIENT') }}.flowdat.com/login_check"
+      with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
+
+    - name: Load redirections app_dev
+      set_fact:
+        uris: "{{ uris }} --redirect_uri=https://{{ item }}.{{ lookup('env', 'CLIENT') }}.flowdat.com/app_dev.php/login_check"
       with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
 
     - name: Create oauth client
@@ -263,6 +271,26 @@
     - name: "Doctrine schema update"
       shell: "bin/console doctrine:schema:update --force"
 
+  # Generate self-signed cert files for Nginx (intended for development, please replace with proper ones)
+- name: "Generate self-signed cert files for Nginx"
+  hosts: 127.0.0.1
+  connection: local
+  tags: self_cert
+  tasks:
+    - name: "Make sure certs dir exists"
+      shell: "mkdir -p /opt/flowdat/certs"
+    - name: "Generate self-signed certs for Nginx"
+      shell: "openssl req -x509 -nodes -batch -days 365 -newkey rsa:2048 -keyout /opt/flowdat/certs/privkey.pem -out /opt/flowdat/certs/fullchain.pem -subj '/C=AR/ST=Santa Fe/L=Rosario/O=Interlink/OU=R&D/CN=*.{{ lookup('env','CLIENT') }}.{{ lookup('env','DOMAIN') }}/emailAddress=idev@interlink.com.ar'"
+
+- name: "Copy certs dir to extra/nginx/certs"
+  hosts: 127.0.0.1
+  connection: local
+  tags: copy_cert
+  tasks:
+    - name: "Copy certs directory"
+      shell: "cp -nr /opt/flowdat/certs/* /opt/flowdat/extra/nginx/certs"
+
+
 - name: "Run up all. Tag=up_all"
   hosts: 127.0.0.1
   connection: local

+ 28 - 4
tools/readme.md

@@ -10,13 +10,13 @@
 #Instalación de requerimientos:
 ### curl
     apt-get update && apt-get install curl git python
-
+ DIR_INSTALL=$(pwd) -t dind 
 ### pip
     # descargo el  archivo get-pip.py desde una url
     curl https://bootstrap.pypa.io/get-pip.py | python
 
     # actualizo pip
-    pip install -U pip
+    pip install -U pip setuptools
 
 ### docker (Versión funcional: apt-get install docker-ce=17.10.0~ce-0~debian    - Versión con errores: 17.11 )
     # con sudo
@@ -28,7 +28,7 @@
     usermod -aG docker iksop
 
 ### docker-compose
-    sudo pip install docker-compose
+    pip install docker-compose
 
 # Pasos:
 ####. Crear un directorio para la instalación, puede ser en cualquier lugar del sistema. Tener en cuenta que en este directorio se descargará código fuente.
@@ -128,13 +128,16 @@
     apt-get remove docker docker-engine docker.io docker-ce
 
 
-## Kernel update
+#### Kernel update
     # agrego los repositorios
     echo "deb http://ftp.us.debian.org/debian/ jessie-backports main" >> /etc/apt/sources.list
     echo "deb-src http://ftp.us.debian.org/debian/ jessie-backports main" >> /etc/apt/sources.list
     # actualizo la version del kernel
     apt-get update ; apt-get install -t jessie-backports linux-image-amd64
 
+#### Obtener un certificado wildcard para HTTP + SSL
+    https://ikflowdat.atlassian.net/wiki/spaces/DL/pages/9469968
+
 ## Errors
 #### Mysql no arranca
     Este es un problema de permisos del directorio mysql. Realizar un chmod fuera del docker.
@@ -163,6 +166,27 @@
     Salgo del docker
         exit
     Ejecuto nuevamente el playbook (ansible)
+    
+#### Pantalla en blanco al ingresar a base luego de una instalación nueva
+    Por algún motivo Base no es capaz de alterar los permisos de la caché durante la instalación.
+    Cambiar los permisos mediante:
+```
+    cd /opt/flowdat/base
+    chmod -R 777 var/cache/ var/logs/ var/sessions/
+```
+
+#### No aparece el logo de Flowdat en el login y en otras pantallas
+    Por alguna razón los assets manejados por assetic no se copian durante la instalación.
+    Ingresar al container Base:
+```
+    cd /opt/flowdat/
+    docker-compose exec base bash
+```
+    Luego correr:
+```
+    bin/console assetic:dump
+```
+    
 
 
 

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

@@ -66,6 +66,7 @@ class TagVendorsCommand extends Command
                     $branchs = $git->branch(['all' => true]);
                     $findBranch = false;
                     $branchRemote = null;
+
                     // verifico si el branch a crear ya existe
                     foreach ($branchs as $branch) {
                         if (strpos($branch['name'], $version) !== false) {
@@ -79,10 +80,12 @@ class TagVendorsCommand extends Command
                         $git->branch->create($version);
                         $cmd .= "$version ";
                     }
+
                     $git->checkout($version);
                     if (!$optionBranch) {
                         // estoy creando un tag
                         $tags = $git->tag();
+
                         if (!in_array($tag, $tags)) {
                             // el tag no existe
                             if ($branchRemote == null) {
@@ -95,9 +98,10 @@ class TagVendorsCommand extends Command
                         }
                         $cmd .= " --tags";
                     }
+                    
                     // ejecuto el comando git
                     shell_exec($cmd);
-		    sleep(5);
+                    sleep(5);
                 } catch (GitException $e) {
                     $output->writeln($e->getTraceAsString());
                     $output->writeln($sec . ": " . $e->getMessage());

+ 102 - 13
tools/src/Release.php

@@ -77,7 +77,7 @@ class Release extends Command
     private $_user_system;
 
     /**
-     * @var string $directory Directorio de instalación
+     * @var string $directory Directorio de instalaci�n
      */
     private $directory;
 
@@ -195,6 +195,11 @@ class Release extends Command
                 'OAUTH' => false,
                 'MODULE_INSTALL' => true
             ),
+            "kea" => array(
+                'HOST_ENV' => false,
+                'OAUTH' => false,
+                'MODULE_INSTALL' => true
+            ),
             "geoserver" => array(
                 'HOST_ENV' => true,
                 "VAR_ENV" => array(
@@ -238,6 +243,9 @@ class Release extends Command
             ->addOption('extra-repo', null, InputOption::VALUE_REQUIRED, 'Git clone Url fot the app Base', "git@bitbucket.org:ikflowdat/extra.git")
             ->addOption('extra-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone the Extra files and apps', "master")
             ->addOption('extra-build', null, InputOption::VALUE_REQUIRED, 'Generate image build', "false")
+            ->addOption('kea-repo', null, InputOption::VALUE_REQUIRED, 'Git clone Url for KEA', "git@bitbucket.org:ikflowdat/kea.git")
+            ->addOption('kea-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone KEA files and apps', "master")
+            ->addOption('kea-build', null, InputOption::VALUE_REQUIRED, 'Generate image build', "false")
             ->addOption('host-ip', null, InputOption::VALUE_REQUIRED, 'Ip of the runnning host to be added to the /etc/hosts file, eventually', "127.0.1.1")
             ->addOption('domain', null, InputOption::VALUE_REQUIRED, 'Domain where the flowdat will be installed', "flowdat.com")
             ->addOption('client', null, InputOption::VALUE_REQUIRED, 'Client name, if is not provided uses, the dirname of the installation', false)
@@ -264,6 +272,7 @@ class Release extends Command
                 $input->setOption('cablemodem-ref', $input->getOption('all-ref'));
                 $input->setOption('dhcp-ref', $input->getOption('all-ref'));
                 $input->setOption('extra-ref', $input->getOption('all-ref'));
+                $input->setOption('kea-ref', $input->getOption('all-ref'));
             }
             if (strtolower($input->getOption("modules")) == "all") {
                 // seteo todos los modulos a instalar por defecto
@@ -303,6 +312,9 @@ class Release extends Command
             $this->_ansible_vars["CLIENT"] = $this->_client;
             $this->_ansible_vars["CMD_USERNAME"] = $this->_user_system['users'][$this->internal_user_id]['user'];
             $this->_ansible_vars["CMD_PASSWORD"] = $this->_user_system['users'][$this->internal_user_id]['password'];
+            $this->_ansible_vars["ENV_LIST"] = "prod,dev,test";
+	    $this->_ansible_vars["API_CIDR"] = "172.20.0.0/24";
+	    $this->_ansible_vars["MYSQL_ROOT_PASSWORD"] = $this->_mysql_root_pass;
 
             $dObj = new DevOps\FileSystem(realpath($this->directory));
             $dObj->dirExists()->realpath();
@@ -398,6 +410,7 @@ class Release extends Command
             ->addService($module)
             ->image($registry . "fd3/$module:" . $version)
             ->restart($this->_docker_restart_default)
+            ->build("base/")
             ->addLinks("mysql:mysql")
             ->addEnv_file("running.env")
             ->addEnv_file($host_env_file)
@@ -421,14 +434,17 @@ class Release extends Command
             ->addService($module)
             ->image($registry . "fd3/$module:" . $version)
             ->restart($this->_docker_restart_default)
+            ->build("ftth/")
             ->addLinks("mysql:mysql")
             ->addLinks("base")
-            ->addLinks("base", $this->getDomain("base"))
+            //->addLinks("base", $this->getDomain("base"))
             ->addEnv_file("running.env")
             ->addEnv_file($host_env_file)
             ->addEnv_file($module . "." . $host_env_file)
             ->addEnv_file($module . ".oauth.env")
-            ->addVolumes("./$module/", "/opt/" . $module);
+            ->addVolumes("./$module/", "/opt/" . $module)
+         ->addVolumes("./extra/netmiko", "/opt/netmiko")
+         ->addVolumes("./extra/backups-config", "/opt/ftth/web/backups-config");
 
         $this->addBuild($module, $composer);
 
@@ -447,10 +463,11 @@ class Release extends Command
             ->addService($module)
             ->image($registry . "fd3/$module:" . $version)
             ->restart($this->_docker_restart_default)
+            ->build("stats/")
             ->addLinks("mysql:mysql")
             ->addLinks("jsonep_mysql:jsonep_mysql")
             ->addLinks("base")
-            ->addLinks("base", $this->getDomain("base"))
+            //->addLinks("base", $this->getDomain("base"))
             ->addVolumes("./$module/", "/opt/$module")
             ->addEnv_file("running.env")
             ->addEnv_file($host_env_file)
@@ -474,9 +491,10 @@ class Release extends Command
             ->addService($module)
             ->image($registry . "fd3/$module:" . $version)
             ->restart($this->_docker_restart_default)
+            ->build("mapas/")
             ->addLinks("mysql:mysql")
             ->addLinks("base")
-            ->addLinks("base", $this->getDomain("base"))
+            //->addLinks("base", $this->getDomain("base"))
             ->addEnv_file("running.env")
             ->addEnv_file($host_env_file)
             ->addEnv_file($module . "." . $host_env_file)
@@ -500,9 +518,10 @@ class Release extends Command
             ->addService($module)
             ->image($registry . "fd3/$module:" . $version)
             ->restart($this->_docker_restart_default)
+            ->build("cablemodem/")
             ->addLinks("mysql:mysql")
             ->addLinks("base")
-            ->addLinks("base", $this->getDomain("base"))
+            //->addLinks("base", $this->getDomain("base"))
             ->addEnv_file("running.env")
             ->addEnv_file($host_env_file)
             ->addEnv_file($module . "." . $host_env_file)
@@ -534,7 +553,7 @@ class Release extends Command
         ->image($registry . "fd3/tftp:" . $version)
         ->addEnv_file($host_env_file)
         ->restart($this->_docker_restart_default)
-        ->addPorts(69, 69);
+        ->addPorts(69, '69/udp');
     }
 
     function addRadius(FileFormat2 $composer, $config = array())
@@ -549,9 +568,10 @@ class Release extends Command
             ->addService($module)
             ->image($registry . "fd3/$module:" . $version)
             ->restart($this->_docker_restart_default)
+            ->build("radius/")
             ->addLinks("mysql:mysql")
             ->addLinks("base")
-            ->addLinks("base", $this->getDomain("base"))
+            //->addLinks("base", $this->getDomain("base"))
             ->addEnv_file("running.env")
             ->addEnv_file($host_env_file)
             ->addEnv_file($module . "." . $host_env_file)
@@ -574,14 +594,17 @@ class Release extends Command
             ->addService($module)
             ->image($registry . "fd3/$module:" . $version)
             ->restart($this->_docker_restart_default)
+            ->build("dhcp/")
             ->addLinks("mysql:mysql")
             ->addLinks("base")
-            ->addLinks("base", $this->getDomain("base"))
+            //->addLinks("base", $this->getDomain("base"))
             ->addEnv_file("running.env")
             ->addEnv_file($host_env_file)
             ->addEnv_file($module . "." . $host_env_file)
             ->addEnv_file("$module.oauth.env")
-            ->addVolumes("./$module/", "/opt/$module");
+            ->addVolumes("./$module/", "/opt/$module")
+            ->addVolumes("./kea/conf", "/opt/dhcp/web/kea")
+            ;
 
         $this->addBuild($module, $composer);
 
@@ -603,6 +626,14 @@ class Release extends Command
             ->restart($this->_docker_restart_default)
             ->addPorts(80, 80)
             ->addPorts(443, 443)
+            ->addVolumes("./base/", "/opt/base")
+            ->addVolumes("./ftth/", "/opt/ftth")
+            ->addVolumes("./mapas/", "/opt/mapas")
+            ->addVolumes("./radius/", "/opt/radius")
+            ->addVolumes("./stats/", "/opt/stats")
+            ->addVolumes("./cablemodem/", "/opt/cablemodem")
+            ->addVolumes("./dhcp/", "/opt/dhcp")
+            ->addVolumes("./grafana/", "/opt/grafana")
             ->addVolumes("/var/run/docker.sock", "/tmp/docker.sock:ro")
             ->addVolumes("./extra/nginx/certs", "/etc/nginx/certs:ro")
             ->addVolumes("./extra/nginx/conf.d", "/etc/nginx/conf.d")
@@ -645,6 +676,7 @@ class Release extends Command
             ->addVolumes("./extra/supervisord/bin/fiberhome", "/usr/bin/fiberhome")
             ->addVolumes("./extra/supervisord/bin/fiberlink", "/usr/bin/fiberlink")
             ->addVolumes("./extra/supervisord/bin/huawei", "/usr/bin/huawei")
+            ->addVolumes("./extra/supervisord/bin/zte", "/usr/bin/zte")
             ->addVolumes("./stats", "/opt/stats")
             ->addEnv_file("running.env")
             ->addEnv_file($host_env_file)
@@ -861,7 +893,9 @@ class Release extends Command
             ->addEnv_file("host.env")
             ->addEnv_file("ftth.host.env")
             ->addEnviroment("AMQP_KEY", "ftth")
-            ->addVolumes("./ftth/", "/opt/ftth");
+            ->addVolumes("./ftth/", "/opt/ftth")
+         ->addVolumes("./extra/netmiko", "/opt/netmiko")
+         ->addVolumes("./extra/backups-config", "/opt/ftth/web/backups-config");
 
         $composer
             ->addService("cablemodem_tasklogger_worker")
@@ -878,6 +912,21 @@ class Release extends Command
             ->addEnviroment("AMQP_KEY", "cablemodem")
             ->addVolumes("./cablemodem/", "/opt/cablemodem");
 
+        $composer
+            ->addService("dhcp_tasklogger_worker")
+            ->image($registry . "fd3/dhcp:" . $version)
+            ->build("./dhcp/")
+            ->command("bin/console rabbitmq:consumer flowdat_tasklogger")
+            ->restart($this->_docker_restart_default)
+            ->addLinks("mysql")
+            ->addLinks("base")
+            ->addLinks("nginx", $this->getDomain("base"))
+            ->addEnv_file("running.env")
+            ->addEnv_file("host.env")
+            ->addEnv_file("dhcp.host.env")
+            ->addEnviroment("AMQP_KEY", "dhcp")
+            ->addVolumes("./dhcp/", "/opt/dhcp");
+
         $composer
             ->addService("ftth_command_worker")
             ->image($registry . "fd3/ftth:" . $version)
@@ -960,14 +1009,49 @@ class Release extends Command
         $registry = "";
         extract($config);
 
+        $module = 'kea';
         $composer
             ->addService("kea")
-            ->image($registry . "fd3/kea:" . $version)
-            ->build("./extra/kea/")
+            ->image($registry . "fd3/kea-1.4.0:" . $version)
+            // ->build("./extra/kea/")
             ->restart($this->_docker_restart_default)
+            ->addPorts(8086, 8080)
+            ->addPorts(67, '67/udp')
+            ->addPorts(68, '68/udp')
             ->addEnv_file("running.env")
             ->addEnv_file("host.env")
+            ->addEnv_file($module . "." . $host_env_file)
+            ->addVolumes("./kea/conf/kea-ctrl-agent.conf", "/usr/local/etc/kea/kea-ctrl-agent.conf")
+            ->addVolumes("./kea/conf/kea-dhcp4.conf", "/usr/local/etc/kea/kea-dhcp4.conf")
+            ->addVolumes("/kea/supervisord", "/etc/supervisord")
+            ->addVolumes("./kea/hooks", "/opt/hooks")
             ;
+        $this->writeVariablesEnviroment($module . "." . $host_env_file, $module,
+            array(
+                "MYSQL_ROOT_PASSWORD" => $this->_mysql_root_pass,
+                "MYSQL_USER" => $this->_mysql_user,
+            ));
+    }
+
+     /**
+     * @param FileFormat2 $composer
+     * @param array $config
+     */
+    public function addSwagger(FileFormat2 $composer, $config = array())
+    {
+        $version = "latest";
+        $registry = "";
+        extract($config);
+
+        $composer
+            ->addService("swagger-ui")
+            ->image($registry . "fd3/swagger-ui:" . $version)
+            ->build("./extra/swagger/")
+            ->restart($this->_docker_restart_default)
+            ->addEnviroment("SWAGGER_JSON", "/foo/ftth.json")
+            ->addEnv_file("running.env")
+            ->addEnv_file("host.env")
+            ->addPorts(8085, 8080);
     }
 
 
@@ -998,7 +1082,9 @@ class Release extends Command
         $this->addMySql($composer, $base_vars);
         $composer
             ->addService("amqp")
+            ->build("./extra/amqp/")
             ->image("rabbitmq:3-management")
+            ->addPorts(15674, 15674)
             ->restart($this->_docker_restart_default);
         $this->addMongDb($composer, $base_vars);
         $this->addRedis($composer, $base_vars);
@@ -1019,6 +1105,9 @@ class Release extends Command
         // Kea
         $this->addKea($composer, $base_vars);
 
+        // Swagger
+        $this->addSwagger($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

+ 1 - 1
tools/user_system.json

@@ -10,7 +10,7 @@
         {
             "user": "iksop",
             "password": "gran5pe",
-            "email": "interno@flowdat.com.ar",
+            "email": "iksop@flowdat.com.ar",
             "tenancy": 1,
             "extra": ""
         },