Импортируйте задачи или плейбуки с логическим условием в Ansible - PullRequest
0 голосов
/ 08 июля 2020

Фактически мне нужно что-то вроде этого:

- hosts: localhost

  tasks:
    - name: Perforce template
      import_tasks: ./../vsphere-client/perforce/template_to_vm.yml
      when: new_server_type == "perforce"

    - name: Gitlab Pgbouncer template
      import_tasks: ./../vsphere-client/gitlab-pgbouncer/template_to_vm.yml
      when: new_server_type == "gitlab-pgbouncer"

    - name: Gitlab Postgres template
      import_tasks: ./../vsphere-client/gitlab-postgres/template_to_vm.yml
      when: new_server_type == "gitlab-postgres"

    - name: Build API template
      import_tasks: ./../vsphere-client/build-api/template_to_vm.yml
      when: new_server_type == "build-api"

Но выдает ошибку, например:

ERROR! unexpected parameter type in action: <type 'bool'>

Я понимаю, что это не поддерживается, но есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 08 июля 2020

Вы пробовали использовать include_tasks ie. что-то вроде следующего

- include_tasks: setup-RedHat.yml
  when: ansible_os_family == 'RedHat'

Итак, для вас это будет примерно так

- hosts: localhost

  tasks:
    - name: Perforce template
      include_tasks: ./../vsphere-client/perforce/template_to_vm.yml
      when: new_server_type == "perforce"
1 голос
/ 08 июля 2020

Должно быть что-то еще, что вы не показываете, потому что ваш код выглядит нормально и должен работать. Я подозреваю, что проблема в файле, который вы импортируете.

Между тем, если не проблема переключиться на include_tasks, вы можете значительно сократить приведенное выше с помощью одной задачи:

---
- hosts: localhost

  tasks:
    - name: "{{ new_server_type }} template"
      include_tasks: "./../vsphere-client/{{ new_server_type }}/template_to_vm.yml"

Если вам действительно нужен чек, чтобы убедиться, что new_server_type имеет правильное значение, это все еще возможно.

---
- hosts: localhost

  vars:
   allowed_types:
     - perforce
     - gitlab-pgbouncer
     - gitlab-postgres
     - build-api

  tasks:
    - name: "{{ new_server_type }} template"
      include_tasks: "./../vsphere-client/{{ new_server_type }}/template_to_vm.yml"
      when: new_server_type in allowed_types
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...