Назад | Перейти на главную страницу

Условные списки Ansible

Я хотел бы развернуть в разные каталоги в зависимости от флага.

Я видел там было --extra-vars который позволяет передавать переменную,

так скажем, --extra-vars "flag=test" или --extra-vars "flag=prod"

Теперь я хотел бы использовать переменные test_ * или prod_ *, в зависимости от этого флага.

  vars:
    test_dirs: ["/dataVolumes/dev/deployments/", "/dataVolumes/qa/deployments/"]

    prod_dirs: ["/dataVolumes/preprod/deployments/", "/dataVolumes/prod/deployments/"]

Допустим, есть два шага: удаление старых файлов и копирование новых файлов.

Есть ли способ сделать что-то вроде следующего?

-
  name: delete old files
  file: 
   state:absent 
   path:"{{item}}"
  with_items: "{{ test_dirs if flag == 'test' else prod_dirs }}"

-
  name: copy new files
  copy:
   src: /opt/ansible/
   dest:"{{item}}"
  with_items: "{{ test_dirs if flag == 'test' else prod_dirs }}"

Например, условный оператор, чтобы выбрать между двумя списками для работы?

Вы можете добиться этого, добавив include_vars задача в начале вашей игры. В качестве переменных, установленных include_vars иметь высокий приоритет они должны исключить переменные, установленные где-либо еще.

Итак, все, что вам нужно сделать, это добавить что-то вроде этого в начале вашей игры:

- name: Include test vars.
  include_vars:
     file: test.yml
  when: test == True

тогда значение переменной test должно быть логическим.

Однако, как уже указывалось, используя group_vars вероятно, было бы более чистым решением.