--- # Terraform Vultr provider doesn't expose the mount_tag. # it does however expose the vfs id, which we save to ansible host vars at time of `tofu apply`. # As a workaround, we use Vultr api to fetch the mount_tag, and mount the vfs to the instance. - name: Get the VFS data ansible.builtin.uri: url: https://api.vultr.com/v2/vfs method: GET status_code: 200 headers: Authorization: "Bearer {{ lookup('dotenv', 'VULTR_API_KEY', file='../.env') }}" register: vfs_list - name: Get VFS variables ansible.builtin.set_fact: our_vfs_id: "{{ vfs_list.json.vfs | selectattr('tags', 'contains', 'our') | map(attribute='id') | first }}" - name: Debug the our VFS id ansible.builtin.debug: msg: "The VFS ID for 'our' is {{ our_vfs_id }}" - name: Attach VFS to Vultr instance ansible.builtin.uri: url: https://api.vultr.com/v2/vfs/{{ vultr_vfs_storage_id }}/attachments/{{ hostvars[inventory_hostname]['vultr_instance_id'] }} method: PUT status_code: - 200 - 201 - 409 headers: Authorization: "Bearer {{ lookup('dotenv', 'VULTR_API_KEY', file='../.env') }}" register: vfs_attach changed_when: - vfs_attach.json is defined - "'state' in vfs_attach.json" - vfs_attach.json.state == "ATTACHED" notify: - Mount vfs - name: Debug vfs_attach ansible.builtin.debug: var: vfs_attach - name: Get the VFS mount_tag ansible.builtin.set_fact: vfs_mount_tag: "{{ vfs_attach.json.mount_tag | default('') }}"