Чтобы запустить playbook на основе ansible_distribution - PullRequest
1 голос
/ 09 февраля 2020

Я написал отдельные сборники игр для развертывания Tomcat как в Ubuntu, так и в Linux, вместо упоминания **

когда: ansible_distribution == 'Ubuntu'

** в каждой строке книги воспроизведения, я хочу запускать всю книгу только при выполнении этого условия.

Это мой код

 - hosts: all
   tasks:
      - name: including the playbook for ubuntu deployment
        include: tomcat_ubuntu_new.yaml
        when: ansible_distribution == 'Ubuntu'

      - name: including the playbook for ubuntu deployment
        include: tomcat_standalone.yaml
        when: ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat'

Ошибка :

ERROR! unexpected parameter type in action: <class 'ansible.parsing.yaml.objects.AnsibleSequence'>

The error appears to be in '/etc/ansible/tomcat_ubuntu_new.yaml': line 3, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


- hosts: all
  ^ here

Я хочу запустить playbook только на хостах на основе ansible_distribution

Я пробовал много способов, но никто не работает, никто не может опубликовать четкий ответ с объяснением

1 Ответ

1 голос
/ 09 февраля 2020

Q: "Я хочу запустить playbook только на хостах на основе ansible_distribution."

A: Невозможно включить сборник пьес. Это приведет к рекурсивному запуску playbooks.

Доступен только import playbook. Более того, import_playbook не является задачей. Это просто инструмент для модульной обработки больших пьес с несколькими играми.

Ansible условные выражения не применяются к import_playbook так же, как они не применяются к пьесам.

Вместо этого можно создать группу, которая будет использоваться в сборнике пьес.

$cat tomcat_ubuntu_new.yaml
---
- hosts: my_dynamic_group
  tasks:
  ...

Например, давайте создадим группу и импортируем пьесу

---
- hosts: all
  tasks:
    - add_host:
        name: "{{ item }}"
        groups: my_dynamic_group
      loop: "{{ groups.all }}"
      when: hostvars[item].ansible_distribution == 'Ubuntu'
      run_once: true

- import_playbook: tomcat_ubuntu_new.yaml
...