---
- hosts: all
  become: yes

  vars_files:
    - vars/main.yml
    - ../default.config.yml

  pre_tasks:
    - include: tasks/config.yml
      tags: ['always']

    - include: tasks/backwards-compatibility.yml
      tags: ['always']
      static: no

    - include: "tasks/init-{{ ansible_os_family }}.yml"
      static: no

    - name: Run configured pre-provision shell scripts.
      script: "{{ item }}"
      with_items: "{{ pre_provision_scripts|default([]) }}"

    - name: Run configured pre-provision ansible task files.
      include: "{{ outer_item }}"
      loop_control:
        loop_var: outer_item
      with_fileglob: "{{ pre_provision_tasks_dir|default(omit) }}"

    - include: tasks/php.yml

  roles:
    # Essential roles.
    - { role: geerlingguy.repo-remi, when: ansible_os_family == 'RedHat', tags: ['webserver', 'php'] }
    - { role: drupalvm.hostname, when: hostname_configure }
    - { role: geerlingguy.firewall, when: firewall_enabled }
    - { role: geerlingguy.git }
    - { role: geerlingguy.postfix }
    - { role: geerlingguy.apache, when: drupalvm_webserver == 'apache', tags: ['webserver']}
    - { role: geerlingguy.apache-php-fpm, when: drupalvm_webserver == 'apache', tags: ['webserver'] }
    - { role: geerlingguy.nginx, when: drupalvm_webserver == 'nginx', tags: ['webserver'] }
    - { role: geerlingguy.php-versions, when: php_version != '', tags: ['php', 'xdebug', 'database'] }
    - { role: geerlingguy.php, tags: ['php'] }
    - { role: geerlingguy.php-pecl, tags: ['php'] }
    - { role: geerlingguy.composer }
    - { role: geerlingguy.mysql, when: drupal_db_backend == 'mysql', tags: ['database'] }
    - { role: geerlingguy.php-mysql, when: drupal_db_backend == 'mysql', tags: ['php', 'database'] }
    - { role: geerlingguy.postgresql, when: drupal_db_backend == 'pgsql', tags: ['database'] }
    - { role: geerlingguy.php-pgsql, when: drupal_db_backend == 'pgsql', tags: ['php', 'database'] }

    # Conditionally-installed roles.
    - { role: geerlingguy.drupal-console, when: 'drupal_major_version > 7 and "drupalconsole" in installed_extras' }
    - { role: geerlingguy.drush, when: '"drush" in installed_extras' }
    - { role: geerlingguy.memcached, when: '"memcached" in installed_extras' }
    - { role: geerlingguy.php-memcached, when: '"memcached" in installed_extras', tags: ['php'] }

    - role: geerlingguy.php-tideways
      workspace: "/root/php{{ php_version }}"
      when: '"tideways" in installed_extras'
      tags: ['php']

    - role: geerlingguy.php-xdebug
      workspace: "/root/php{{ php_version }}"
      when: '"xdebug" in installed_extras'
      tags: ['php', 'xdebug']

    - role: geerlingguy.php-xhprof
      workspace: "/root/php{{ php_version }}"
      when: '"xhprof" in installed_extras'
      tags: ['php']

    - role: thom8.php-upload-progress
      workspace: "/root/php{{ php_version }}"
      when: '"upload-progress" in installed_extras'
      tags: ['php']

    - { role: geerlingguy.blackfire, when: '"blackfire" in installed_extras' }
    - { role: geerlingguy.adminer, when: '"adminer" in installed_extras', tags: ['database'] }
    - { role: geerlingguy.pimpmylog, when: '"pimpmylog" in installed_extras' }
    - { role: geerlingguy.daemonize, when: '"mailhog" in installed_extras' }
    - { role: geerlingguy.mailhog, when: '"mailhog" in installed_extras' }
    - { role: franklinkim.newrelic, when: '"newrelic" in installed_extras' }
    - { role: geerlingguy.nodejs, when: '"nodejs" in installed_extras' }
    - { role: geerlingguy.redis, when: '"redis" in installed_extras' }
    - { role: geerlingguy.php-redis, when: '"redis" in installed_extras', tags: ['php'] }
    - { role: geerlingguy.ruby, when: '"ruby" in installed_extras' }

    - role: geerlingguy.java
      when: >
        "java" in installed_extras or
        "solr" in installed_extras or
        "selenium" in installed_extras or
        "elasticsearch" in installed_extras

    - { role: arknoll.selenium, when: '"selenium" in installed_extras' }
    - { role: geerlingguy.solr, when: '"solr" in installed_extras' }
    - { role: geerlingguy.elasticsearch, when: '"elasticsearch" in installed_extras' }
    - { role: geerlingguy.varnish, when: '"varnish" in installed_extras' }
    - { role: drupalvm.www, tags: ['webserver'] }
    - { role: geerlingguy.drupal, tags: ['drupal'] }

    # Roles for security and stability on production.
    - { role: geerlingguy.security, when: extra_security_enabled }

  tasks:
    - include: tasks/sshd.yml
    - include: tasks/extras.yml

    - include: tasks/apparmor.yml
      when: ansible_os_family == 'Debian' and drupal_db_backend == 'mysql'
      tags: ['database']

    - include: tasks/drush-aliases.yml

    - include: tasks/cron.yml
      tags: ['cron']

    - include: tasks/dashboard.yml
      when: dashboard_install_dir is defined and dashboard_install_dir != ''
      tags: ['webserver', 'database', 'php']

    - name: Run configured post-provision shell scripts.
      script: "{{ item }}"
      with_items: "{{ post_provision_scripts|default([]) }}"

    - name: Run configured post-provision ansible task files.
      include: "{{ outer_item }}"
      loop_control:
        loop_var: outer_item
      with_fileglob: "{{ post_provision_tasks_dir|default(omit) }}"