Accessing the GitLab remote Terraform state from Ansible

Published

Note to self: How to get the outputs from a GitLab remote Terrafrom state from Ansible.

---
- name: Get Terraform outputs from the GitLab remote state
  hosts:
    - localhost
  connection: local
  become: false
  gather_facts: false
  vars:
    project_name: amilive
    tf_workspace: "{{ lookup('env', 'TF_WORKSPACE')|default('default', true) }}"
    gitlab_token: "{{ lookup('env', 'GITLAB_TOKEN') }}"
    gitlab_base_url: "{{ lookup('env', 'GITLAB_BASE_URL') }}"

  tasks:
    - name: Projects
      ansible.builtin.uri:
        headers:
          PRIVATE-TOKEN: "{{ gitlab_token }}"
        method: GET
        url: "{{ gitlab_base_url }}/projects"
      register: projects

    - name: Request
      ansible.builtin.uri:
        headers:
          PRIVATE-TOKEN: "{{ gitlab_token }}"
        method: GET
        return_content: true
        status_code: [200]
        url: "{{ gitlab_base_url }}/projects/{{ project_id }}/terraform/state/{{ tf_workspace }}"
      vars:
        project_id: "{{ (projects.json|selectattr('path', 'equalto', project_name))[0].id }}"
      register: tf_state

    - name: Env output
      debug:
        var: (tf_state.content|from_json)["outputs"]["env"]["value"]