<%#
name: Smart Proxy Upgrade Playbook
snippet: false
template_inputs:
- name: target_version
  required: false
  input_type: user
  advanced: false
  value_type: plain
  hidden_value: false
- name: whitelist_options
  required: false
  input_type: user
  advanced: false
  value_type: plain
  hidden_value: false
model: JobTemplate
job_category: Maintenance Operations
description_format: "%{template_name}"
provider_type: Ansible
kind: job_template
feature: ansible_run_capsule_upgrade
%>

---
- hosts: all
  vars:
    target_version: "<%= input('target_version').present? ? input('target_version') : product_short_version %>"
<% if plugin_present?('foreman_theme_satellite') -%>
  tasks:
    - name: Gather the rpm package facts
      package_facts:
        manager: auto

    - name: Fail if the target server is a Satellite server
      fail:
        msg: "This playbook cannot be executed on a Satellite server. Use only on a Capsule server."
      when: "'satellite' in ansible_facts.packages"

    - name: Install|Update satellite-maintain if not present
      package:
        name: rubygem-foreman_maintain
        state: latest

    - block:
      <%- whitelist_option = if input('whitelist_options').present?
                               "--whitelist=#{input('whitelist_options')}"
                             end -%>
      - name: Upgrade Capsule server using satellite-maintain
        shell: satellite-maintain upgrade run --assumeyes --target-version={{ target_version }} <%= whitelist_option %>
        register: result

      - name: Re-Gather the rpm package facts after the upgrade
        package_facts:
          manager: auto

      - name: satellite-maintain upgrade return code is zero
        debug:
          msg: "Success! Capsule server upgrade completed. Current version of Capsule server server is {{ ansible_facts.packages['satellite-capsule'][0]['version'] }}."

      rescue:
        - name: Print satellite-maintain output
          debug:
            var: result

        - name: Grep top 10 Error messages from /var/log/foreman-installer/capsule.log
          shell: grep '^\[ERROR' /var/log/foreman-installer/capsule.log | head -n10
          register: output_grep

        - name: Print grepped Error messages
          debug:
            var: output_grep.stdout_lines

        - name: satellite-maintain upgrade return code is non-zero
          fail:
            msg: "Failed! Capsule server upgrade failed. See /var/log/foreman-installer/capsule.log in the Capsule server for more information"
<% else -%>
  tasks:
    - name: Gather the rpm package facts
      package_facts:
        manager: auto

    - name: Fail if the target server is a Foreman server
      fail:
        msg: "This playbook cannot be executed on a Foreman server. Use only on a Smart Proxy server."
      when: "'foreman' in ansible_facts.packages"

    - name: Install foreman release gpg key
      rpm_key:
        state: present
        key: http://yum.theforeman.org/releases/{{ target_version }}/RPM-GPG-KEY-foreman
      when: target_version != "nightly"

    - name: Update foreman repositories
      package:
        name: https://yum.theforeman.org/releases/{{ target_version }}/el{{ ansible_distribution_major_version }}/{{ ansible_architecture }}/foreman-release.rpm
        state: installed

    - name: Clean yum metadata
      command: yum clean all

    - name: Update all packages
      package:
        name: '*'
        state: latest

    - name: Run the installer
      shell: foreman-installer
<% end -%>