---
- name: Set up local server
  hosts: all
  remote_user: vagrant
  become_user: root
  become_method: sudo
  vars:
    app_path: "/var/www/snipeit"
    fqdn: "localhost"
  tasks:
    - name: Update and upgrade existing apt packages
      become: true
      apt:
        upgrade: yes
        update_cache: yes
    - name: Install Utilities
      become: true          
      apt:
        name: "{{ packages }}"
        state: present 
      vars: 
        packages:
          - nano
          - vim
    - name: Installing Apache httpd, PHP, MariaDB and other requirements.
      become: true
      apt:
        name: "{{ packages }}"
        state: present
      vars:
        packages:
          - mariadb-client
          - php
          - php-curl
          - php-mysql
          - php-gd
          - php-ldap
          - php-zip
          - php-mbstring
          - php-xml
          - php-bcmath
          - curl
          - git
          - unzip
          - python-pymysql
    #
    # Install the lastest version of composer
    #
    - name: Composer check
      stat:
        path: /usr/local/bin/composer
      register: composer_exits
    - name: Install Composer
      shell: |
        EXPECTED_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig)
        php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
        ACTUAL_SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');")

        if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ]
        then
            >&2 echo 'ERROR: Invalid installer signature'
            rm composer-setup.php
            exit 1
        fi

        php composer-setup.php --quiet
        RESULT=$?
        rm composer-setup.php
        mv composer.phar /usr/local/bin/composer
        exit $RESULT
      when: not composer_exits.stat.exists
      args:
        creates: /usr/local/bin/composer
      become: true
    #
    # Install and Configure MariaDB
    #
    - name: Install MariaDB
      become: true
      apt:
        name: mariadb-server
        state: present
      register: sql_server
    - name: Start and Enable MySQL server
      become: true 
      systemd:
        state: started
        enabled: yes
        name: mariadb
    - name: Create Vagrant mysql password
      become: true
      mysql_user:
        name: vagrant
        password: vagrant
        login_unix_socket: /var/run/mysqld/mysqld.sock
        priv: "*.*:ALL"
        state: present
    - name: Enable remote mysql
      replace:
        path: /etc/mysql/mariadb.conf.d/50-server.cnf
        regexp: "127.0.0.1"
        replace: "0.0.0.0" 
      become: true         
      notify:
        - restart mysql
    - name: Create snipeit database
      become: true
      mysql_db:
        name: snipeit
        state: present
        login_unix_socket: /var/run/mysqld/mysqld.sock
    #  
    # Install Apache Web Server
    #
    - name: Install Apache 2.4
      apt:
        name: "{{ packages }}"
        state: present
      vars:
        packages:
          - apache2
          - libapache2-mod-php
      become: true    
      register: apache2_server     
    - name: Start and Enable Apache2 Server
      become: true
      systemd:
        name: apache2
        state: started
        enabled: yes
    #- name: Disable Apache modules
    #  become: true 
    #  apache2_module:
    #    state: absent
    #    name: "{{ item }}"
    #  with_items: 
    #    #- mpm_prefork
    #  notify:
    #    - restart apache2
    - name: Enable Apache modules
      become: true
      apache2_module:
        state: present
        name: "{{ item }}"
      with_items:
        - rewrite
        - vhost_alias
        - deflate
        - expires
        - proxy_fcgi
        - proxy
      notify:
        - restart apache2
    - name: Install Apache VirtualHost File
      become: true
      template:
        src: apachevirtualhost.conf.j2
        dest: "/etc/apache2/sites-available/snipeit.conf"
    - name: Enable VirtualHost
      become: true
      command: a2ensite snipeit
      args:
        creates: /etc/apache2/sites-enabled/snipeit.conf
      notify:
        - restart apache2
    - name: Map apache dir to local folder
      become: true
      file:
        src: /vagrant
        dest: "{{ app_path }}"
        state: link
      notify:
        - restart apache2
    #
    # Install dependencies from composer
    #
    - name: Install dependencies from composer
      composer:
        command: install
        working_dir: "{{ app_path }}"
      notify:
        - restart apache2
    #
    # Configure .env file
    #
    - name: Copy .env file
      copy:
        src: "{{ app_path }}/.env.example"
        dest: "{{ app_path }}/.env"
    - name: Configure .env file
      lineinfile:
        path: "{{ app_path }}/.env"
        regexp: "{{ item.regexp }}"
        line: "{{ item.line }}"
      with_items:
        - { regexp: '^DB_HOST=', line: 'DB_HOST=127.0.0.1'}
        - { regexp: '^DB_DATABASE=', line: 'DB_DATABASE=snipeit' }
        - { regexp: '^DB_USERNAME=', line: 'DB_USERNAME=vagrant' }
        - { regexp: '^DB_PASSWORD=', line: 'DB_PASSWORD=vagrant' }
        - { regexp: '^APP_URL=', line: "APP_URL=http://{{ fqdn }}" }
        - { regexp: '^APP_ENV=', line: "APP_ENV=development" }
        - { regexp: '^APP_DEBUG=', line: "APP_ENV=true" }
    - name: Generate application key
      shell: "php {{ app_path }}/artisan key:generate --force"
    - name: Artisan Migrate
      shell: "php {{ app_path }}/artisan migrate --force"
    #
    # Create Cron Job
    #
    - name: Create scheduler cron job
      become: true
      cron:
        name: "Snipe-IT Artisan Scheduler"
        job: "/usr/bin/php {{ app_path }}/artisan schedule:run"
  handlers:
    - name: restart apache2
      become: true
      systemd:
        name: apache2
        state: restarted
    - name: restart mysql
      become: true
      systemd:
        name: mysql
        state: restarted

