Напишите Ansible сборников, используя словарь Python - PullRequest
1 голос
/ 25 января 2020

Я пытаюсь выполнить следующую пьесу с использованием сценария python.

playbook = dict(
        name = "Enable Site",
        hosts = [host],
        gather_facts = 'no',
        tasks = [
            dict(action=dict(
                module='find', args=dict(paths="/etc/apache2/sites-enabled")), register='files_found'),
            dict(action=dict(
                module='shell', args="cd /etc/apache2/sites-enabled && a2dissite *"), register='shell_out', when='files_found.matched > 0'),
            dict(action=dict(module='shell', args="a2ensite " + site_name), register='shell_out'),
            dict(action=dict(module='service', args="name='apache2' state='reloaded'"), register='shell_out'),
        ]
    )

Эта книга воспроизведения в основном проверяет, включен ли какой-либо сайт apache, если да, то отключает их, удаляя все файлы из / etc / apache2 / sites-enabled.

Вторая задача должна выполняться, когда каталог /etc/apache2/sites-enabled пуст. Но «когда» условие всегда оценивается как истинное. Даже если я напишу when="False". Также попробовал when="eval(False)"

1 Ответ

0 голосов
/ 25 января 2020

Если я преобразую ваш playbook словарь в обычную Ansible игровую тетрадь, например, так:

- name: Enable Site
  hosts:
    - localhost
  gather_facts: no
  tasks:
    - action:
        module: find
        args:
          paths: /etc/apache2/sites-enabled
      register: files_found
    - action:
        module: shell
        args: cd /etc/apache2/sites-enabled && a2dissite *
      register: shell_out
      when: files_found.matched > 0
    - action:
        module: shell
        args: a2ensite 100-mysite.conf
      register: shell_out
    - action:
        module: service
        args: name='apache2' state='reloaded'
      register: shell_out

Кажется, он работает так, как задумано. То есть, если я начну с пустой директории /etc/apache2/sites-enabled, я вижу:

PLAY [Enable Site] *******************************************************************

TASK [find] **************************************************************************
ok: [localhost]

TASK [shell] *************************************************************************
skipping: [localhost]

TASK [shell] *************************************************************************
changed: [localhost]

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

  • Он проверяет, пуст ли каталог
  • Если это не так, он отключает все
  • Он устанавливает файл в directory

Это означает, что каждый раз, когда вы запускаете эту пьесу, она будет очищать /etc/apache2/sites-enabled, а затем снова включать сайт, указанный в переменной site_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...