---
# tasks file for aem installations

  - name: AEM | Remove existing AEM installations
    when: force_reinstall_aem
    file:
      path={{ aem_home }}
      state=absent
    tags: aem

  - name: AEM | Check for AEM_HOME folder
    stat:
      path="{{ aem_home }}"
    register: aem_home_status
    tags: aem

  - name: AEM | Set Installation flag to false if AEM_HOME dir exists
    when: aem_home_status.stat.exists
    set_fact:
      install_aem: false
    tags: aem

  - name: AEM | Set Variables for AEM 6.3
    when: install_aem and aem_version == "6.3"
    set_fact:
      create_aem_datastore: true
      datastore_config_6_3: true
    tags: aem

  - name: AEM | Set Variables for AEM 6.2
    when: install_aem and aem_version == "6.2"
    set_fact:
      create_aem_datastore: true
      datastore_config_6_x: true
      install_compaction_tools: true
      oak_run_version: 1.4.17
    tags: aem

  - name: AEM | Set Variables for AEM 6.1
    when: install_aem and aem_version == "6.1"
    set_fact:
      create_aem_datastore: true
      datastore_config_6_x: true
      install_compaction_tools: true
      oak_run_version: 1.2.27
    tags: aem

  - name: AEM | Set Variables for AEM 6.0
    when: install_aem and aem_version == "6.0"
    set_fact:
      create_aem_datastore: true
      datastore_config_6_x: true
      install_compaction_tools: true
      oak_run_version: 1.0.38
    tags: aem

  - name: AEM | Add AEM Process Group
    when: install_aem
    group:
      name={{ aem_process_group }}
      state=present
    tags: aem

  - name: AEM | Create AEM Process User
    when: install_aem
    user:
      name={{ aem_process_user }}
      groups={{ aem_process_group }}
    tags: aem

  - name: AEM | Create AEM_HOME and temp directory
    when: install_aem
    file:
      path={{ item }}
      state=directory
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0755
      force=yes
      setype=default_t
      directory_mode=yes
    with_items:
      - "{{ aem_root_dir }}"
      - "{{ aem_home }}"
      - "{{ aem_tmp_dir }}"
    tags: aem

  - name: AEM | Download AEM {{ aem_version }} jar
    when: install_aem
    get_url:
      url={{ aem_download_link }}
      dest={{ aem_home }}/{{ aem_jar }}
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0644
      force=yes
      setype=default_t
    tags: aem

  - name: AEM | Build AEM license
    when: install_aem
    template:
      src={{ playbook_dir }}/../assets/templates/aem.license.properties.j2
      dest={{ aem_home }}/license.properties
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0644
      force=yes
      setype=default_t
    tags: aem

  - name: AEM | Set limits.conf for AEM process Users
    when: install_aem and aem_process_user is defined
    lineinfile:
      dest=/etc/security/limits.conf
      state=present
      line='{{ item }}'
    with_items:
      - "{{ aem_process_user }} soft nofile 8092"
      - "{{ aem_process_user }} hard nofile 50000"
    tags: aem

  - name: AEM | Extract AEM {{ aem_version }} jar
    when: install_aem
    shell: java -jar {{ aem_home }}/{{ aem_jar }} -b {{ aem_home }} -unpack
    tags: aem

  - name: AEM | Correct Permissions after JAR Extraction
    when: install_aem
    file:
      dest={{ aem_root_dir }}
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      recurse=yes
    tags: aem

  - name: AEM | Create AEM_HOME/crx-quickstart/install and Datastore directory
    when: install_aem and create_aem_datastore
    file:
      path={{ item }}
      state=directory
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0755
      force=yes
      setype=default_t
      directory_mode=yes
    with_items:
      - "{{ aem_install_dir }}"
      - "{{ aem_datastore_path }}"
    tags: aem

  - name: AEM | Build Datastore 6.3 configuration (FileDataStore.cfg)
    when:
      - install_aem
      - create_aem_datastore
      - datastore_config_6_3 is defined
      - datastore_config_6_3
    template:
      src={{ playbook_dir }}/../assets/templates/org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.cfg.AEM6_3.j2
      dest={{ aem_install_dir }}/org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.cfg
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0644
      force=yes
      setype=default_t
    tags: aem

  - name: AEM | Build AEM 6.x Datastore configuration (FileDataStore.cfg)
    when:
      - install_aem
      - create_aem_datastore
      - datastore_config_6_x is defined
      - datastore_config_6_x
    template:
      src={{ playbook_dir }}/../assets/templates/org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.cfg.j2
      dest={{ aem_install_dir }}/org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.cfg
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0644
      force=yes
      setype=default_t
    tags: aem

  - name: AEM | Build Datastore configuration (SegmentNodeStoreService.cfg)
    when:
      - install_aem
      - create_aem_datastore
      - datastore_config_6_x is defined
      - datastore_config_6_x
    template:
      src={{ playbook_dir }}/../assets/templates/org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreService.cfg.j2
      dest={{ aem_install_dir }}/org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreService.cfg
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0644
      force=yes
      setype=default_t
    tags: aem

  - name: AEM | Build AEM Start script
    when: install_aem or update_aem_start_scripts
    template:
      src={{ playbook_dir }}/../assets/templates/aem_start.sh.j2
      dest={{ aem_home }}/crx-quickstart/bin/start
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0744
      force=yes
      setype=default_t
    tags: aem

  - name: AEM | Build AEM Config override
    when: install_aem or update_aem_config_override
    template:
      src={{ playbook_dir }}/../assets/templates/aem_config_override.j2
      dest={{ aem_config_override_file }}
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0644
      force=yes
      setype=default_t
    tags: aem

  - name: AEM | Autostart script from template
    when: install_aem or update_aem_start_scripts
    template:
      src={{ playbook_dir }}/../assets/templates/init_aem.sh.j2
      dest=/etc/init.d/{{ item }}
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0744
      force=yes
      setype=default_t
    with_items:
      -  "{{ aem_start_command }}"
    tags: aem

  - name: AEM | Enable services for automatic start
    when: install_aem and enable_aem_autostart
    service:
      name: "{{ item }}"
      enabled: yes
    with_items:
      -  "{{ aem_start_command }}"

  - name: AEM | Create aem tools directory
    when: install_aem or install_aem_tools
    file:
      path={{ item }}
      state=directory
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0755
      force=yes
      setype=default_t
      directory_mode=yes
    with_items:
      - "{{ aem_tools_home }}"
    tags: aem

  - name: AEM | Install AEM restart script
    when: install_aem or install_aem_tools
    template:
      src={{ playbook_dir }}/../assets/templates/{{ item }}.sh.j2
      dest={{ aem_tools_home }}/{{item}}_{{ aem_mode }}.sh
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0744
      force=yes
      setype=default_t
    with_items:
      - restart_aem
    tags: aem

  - name: AEM | Install AEM SCP and ThreadDump scripts
    when: install_aem or install_aem_tools
    template:
      src={{ playbook_dir }}/../assets/templates/{{ item }}.sh.j2
      dest={{ aem_tools_home }}/{{item}}.sh
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0744
      force=yes
      setype=default_t
    with_items:
      - scp
      - threaddump
    tags: aem

  - name: AEM | Download OAK Run JAR
    when: install_compaction_tools and install_aem_tools
    get_url:
      url=https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/{{ oak_run_version }}/oak-run-{{ oak_run_version }}.jar
      dest={{ aem_tools_home }}/oak-run-{{ oak_run_version }}.jar
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0644
      force=yes
      setype=default_t
    tags: aem

  - name: AEM | Install AEM Compaction Script
    when: install_compaction_tools and install_aem_tools
    template:
      src={{ playbook_dir }}/../assets/templates/{{ item }}.sh.j2
      dest={{ aem_tools_home }}/{{item}}_{{ aem_mode }}.sh
      owner={{ aem_process_user }}
      group={{ aem_process_group }}
      mode=0744
      force=yes
      setype=default_t
    with_items:
      - compaction
      - compaction_monitor
    tags: aem
