Gé Fa
Gé Fa

Reputation: 96

Iterating over variables in Ansible

I'm trying to use the same set of variables for the various modules in my play (with some slight variations as you will see).

It seemed logical to include them as 'vars' at the top of my play, but i then have trouble referring to them later on. So far i've done this :

- name: destruction instance sur GCP
  hosts: localhost
  gather_facts: no
  vars:
    gcp_project: ansible-test-248409
    gcp_cred_kind: serviceaccount
    gcp_cred_file: /google/service-accounts/ansible-test-248409-fbadc808948d.json
    zone: europe-west1-b
    region: europe-west1
    machine_type: n1-standard-1
    machines:
      - webserver-1
      - webserver-2
      - webserver-3
      - devops-1
      - devops-2    

  tasks:
    - name: destruction des machines
      gcp_compute_instance:
          name: "{{ machines }}"
          state: absent
          zone: "{{ zone }}"
          project: "{{ gcp_project }}"
          auth_kind: "{{ gcp_cred_kind }}"
          service_account_file: "{{ gcp_cred_file }}"
          scopes:
            - https://www.googleapis.com/auth/compute


    - name: destruction des disques
      gcp_compute_disk:
          name: "{{ machines }}-disk"
          state: absent
          zone: "{{ zone }}"
          project: "{{ gcp_project }}"
          auth_kind: "{{ gcp_cred_kind }}"
          service_account_file: "{{ gcp_cred_file }}"
          scopes:
            - https://www.googleapis.com/auth/compute

Which gives me this error message

[WARNING]: The value ['webserver-1', 'webserver-2', 'webserver-3', 'devops-1', 'devops-2'] (type list) in a string field was
converted to u"['webserver-1', 'webserver-2', 'webserver-3', 'devops-1', 'devops-2']" (type string). If this does not look like what
you expect, quote the entire value to ensure it does not change.
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Invalid JSON response with error: <HTML>\n<HEAD>\n<TITLE>Bad Request</TITLE
>\n</HEAD>\n<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n<H1>Bad Request</H1>\n<H2>Error 400</H2>\n</BODY>\n</HTML>\n"}

Using 'lookup' or 'query' doesn't work either. Can anyone see what i'm missing ?

Upvotes: 1

Views: 157

Answers (1)

sadok-f
sadok-f

Reputation: 1447

you use with_items: option.

tasks:
- name: destruction des machines
  gcp_compute_instance:
      name: "{{ item }}"
      state: absent
      zone: "{{ zone }}"
      project: "{{ gcp_project }}"
      auth_kind: "{{ gcp_cred_kind }}"
      service_account_file: "{{ gcp_cred_file }}"
      scopes:
        - https://www.googleapis.com/auth/compute
  with_items: "{{ machines }}"

Upvotes: 2

Related Questions