distributable:
  url: https://github.com/ansible/ansible/archive/v{{version}}.tar.gz
  strip-components: 1

versions:
  github: ansible/ansible/tags  # reads github *tags*
  strip: /^v/

dependencies:
  python.org: '>=3.7<3.12'

build:
  script: |
    python-venv.sh {{prefix}}/bin/ansible

    # manually register all the ansible-* executables with tea
    #FIXME dirty hack, replace with a proper solution
    for _EXEC in {{prefix}}/venv/bin/ansible-*; do
      CMD_NAME="${_EXEC##*/}" # get text after the last slash (the command name)
      TRG_BIN_NAME="{{prefix}}/bin/$CMD_NAME"
      cp -v  {{prefix}}/bin/ansible $TRG_BIN_NAME # copy the tea-configured executable with the correct name
      # replace the original 'ansible' with the correct $CMD_NAME
      sed -i.bak -e \
        "s|/bin/ansible|/bin/$CMD_NAME|" \
        $TRG_BIN_NAME
    done

    # install paramiko, a python ssh library sometimes used with ansible
    {{prefix}}/venv/bin/pip install paramiko #FIXME should we pin a version?

    rm -v {{prefix}}/bin/ansible-*.bak


test:
  script: |
    ansible --version
    ansible-playbook playbook.yml -i hosts.ini

    #FIXME below is a test from the brew formula, but I'm not sure what it's testing
    # ^ especially considering that 'requests' is not a part of ansible's dependencies
    # Ensure requests[security] is activated
    # py_script="import requests as r; r.get('https://mozilla-modern.badssl.com')"
    # {{prefix}}/venv/bin/python -c "$py_script"

    # Ensure ansible-vault can encrypt/decrypt files.
    echo $SECRET_MESSAGE > vault-test-file.txt
    echo $VAULT_PASSWORD > vault-password.txt

    ansible-vault encrypt --vault-password-file vault-password.txt vault-test-file.txt
    test "$(cat vault-test-file.txt)" != "$SECRET_MESSAGE" # encrypted

    ansible-vault decrypt --vault-password-file vault-password.txt vault-test-file.txt
    test "$(cat vault-test-file.txt)" = "$SECRET_MESSAGE" # decrypted

    # ensure paramiko is installed
    {{prefix}}/venv/bin/python -c "import paramiko"

  env:
    VAULT_PASSWORD: "123456789"
    SECRET_MESSAGE: "Hello world!"


provides:
  - bin/ansible
  - bin/ansible-config
  - bin/ansible-connection
  - bin/ansible-console
  - bin/ansible-doc
  - bin/ansible-galaxy
  - bin/ansible-inventory
  - bin/ansible-playbook
  - bin/ansible-pull
  - bin/ansible-test
  - bin/ansible-vault
