---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

####################################################################
# WARNING: These are designed specifically for Ansible tests       #
# and should not be used as examples of how to write Ansible roles #
####################################################################

- name: Install from system packages
  when: ansible_os_family != "Darwin" and target_system_python
  block:

  - name: Include OS-specific variables
    include_vars: '{{ lookup("first_found", search) }}'
    vars:
      search:
        files:
        - '{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml'
        - '{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml'
        - '{{ ansible_distribution }}.yml'
        - '{{ ansible_os_family }}.yml'
        paths:
        - vars

  - when: has_pyopenssl
    block:

    - name: Install pyOpenSSL (Python 3 from system packages)
      become: true
      package:
        name: '{{ pyopenssl_package_name_python3 }}'
      when: ansible_python_version is version('3.0', '>=')

    - name: Install pyOpenSSL (Python 2 from system packages)
      become: true
      package:
        name: '{{ pyopenssl_package_name }}'
      when: ansible_python_version is version('3.0', '<')

- name: Install from PyPi
  when: ansible_os_family == "Darwin" or not target_system_python
  block:

  - name: Install pyOpenSSL (PyPi)
    become: true
    pip:
      name: pyOpenSSL
      state: "{{ 'latest' if not target_system_python_cannot_upgrade_cryptography else omit }}"
      extra_args: "-c {{ remote_constraints }}"

- when: has_pyopenssl
  block:

  - name: Register pyOpenSSL version
    command: "{{ ansible_python.executable }} -c 'import OpenSSL; print(OpenSSL.__version__)'"
    register: pyopenssl_version

  - name: Register pyOpenSSL debug details
    command: "{{ ansible_python.executable }} -m OpenSSL.debug"
    register: pyopenssl_debug_version
    ignore_errors: true

# Depending on which pyOpenSSL version has been installed, it could be that cryptography has
# been upgraded to a newer version. Make sure to register cryptography_version another time here
# to avoid strange testing behavior due to wrong values of cryptography_version.
- name: Register cryptography version
  command: "{{ ansible_python.executable }} -c 'import cryptography; print(cryptography.__version__)'"
  register: cryptography_version
  ignore_errors: true  # in case cryptography was not installed, and setup_openssl hasn't been run before, ignore errors
