Ошибка запуска службы Ignite, но задача ansible не завершается - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь написать ansible (версия 2.6.17) playbook для установки ignite (2.7.6) на сервер linux в качестве службы systemd.

Запуск Playbook завершается без сбоев.

    PLAY [install ignite in servers]
    ************************************************************************************************

    TASK [Gathering Facts] 
    *************************************************************************************
    ok: [ignitehost1]

    TASK [ignite/install : download and unarchive ignite binaries] 
    **********************************************************************************************
    changed: [ignitehost1]

    TASK [ignite/install : copy config file] 
    *****************************************************************************************
    changed: [ignitehost1]

    TASK [ignite/install : include_tasks]  
    *******************************************************************************
    included: /home/platform/ignite/ansible-ignite/roles/ignite/install/tasks/systemd.yml for 
    ignitehost1

    TASK [ignite/install : install ignite.service] 
    ************************************************************************
    changed: [ignitehost1] => (item={u'd': u'/etc/systemd/system', u'f': u'ignite.service'})

    TASK [ignite/install : systemctl daemon-reload] 
    *****************************************************
    ok: [ignitehost1]

    TASK [ignite/install : start ignite] 
    ******************************************************************************
    changed: [ignitehost1]

    TASK [ignite/install : check if ignite has started] 
    *****************************************************************************
    changed: [ignitehost1]

    PLAY RECAP 
    ***********************************************************
    ignitehost1               : ok=8    changed=5    unreachable=0    failed=0

Но мой запуск зажигания не удался по известным причинам. Как вы можете видеть из вывода статуса службы зажигания, представленного ниже, основной процесс завершился со статусом SUCCESS, что, как мне кажется, является причиной того, что мой прогон playbook был успешным. Есть ли какой-нибудь способ прервать мой прогон playbook, если есть возникли какие-либо ошибки при запуске моей службы.

sudo systemctl status ignite
? ignite.service
Loaded: loaded (/etc/systemd/system/ignite.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Mon 2020-03-16 16:10:32 IST; 12min ago
Process: 28938 ExecStart=/home/platform/ignite/tmp/apache-ignite-2.7.6-bin/bin/ignite.sh 
(code=exited, 
status=0/SUCCESS)
Main PID: 28938 (code=exited, status=0/SUCCESS)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1730)
Mar 16 16:10:32 ignitehost1 Ignite[28938]: at 
org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1158)
Mar 16 16:10:32 ignitehost1  Ignite[28938]: at 
org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:1076)
Mar 16 16:10:32 ignitehost1  Ignite[28938]: at 
org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:962)
Mar 16 16:10:32 ignitehost1  Ignite[28938]: at 
org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:861)
Mar 16 16:10:32 ignitehost1  Ignite[28938]: at 
org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:731)
Mar 16 16:10:32 ignitehost1  Ignite[28938]: at 
org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:700)
Mar 16 16:10:32 ignitehost1  Ignite[28938]: at org.apache.ignite.Ignition.start(Ignition.java:348)
Mar 16 16:10:32 ignitehost1  Ignite[28938]: ... 1 more
Mar 16 16:10:32 ignitehost1  Ignite[28938]: Failed to start grid: Cannot write to work directory: 
/home/platform/ignite/tmp/apache-ig...in/work
Hint: Some lines were ellipsized, use -l to show in full.

Ниже приведен файл задачи для запуска воспламенения.

    ---
    - name: install ignite.service
       become: yes
       become_user: root
       with_items:
        - f: ignite.service
          d: /etc/systemd/system
      template:
        src: '{{ item.f }}.j2'
        dest: '{{ item.d }}/{{ item.f }}'
        mode: '{{ item.m|default("0644") }}'
      register: ignite_service_installed

    - name: systemctl daemon-reload
      become: yes
      become_user: root
      systemd:
        daemon_reload: yes

    - name: start ignite
      become: yes
      become_user: root
      service:
        name: ignite
        enabled: yes
        state: started

Ниже приведен файл шаблона системного блока для службы воспламенения

    Description=Apache Ignite Service
    After=network.target

   [Service]
   Type=simple
   WorkingDirectory="{{installation_dir}}/apache-ignite-{{ignite_version}}-bin"
   User=platform
   PrivateDevices=yes
   ProtectSystem=full
   ExecReload=/bin/kill -HUP $MAINPID
   KillMode=mixed
   KillSignal=SIGTERM
   TimeoutStopSec=10
   ExecStart="{{installation_dir}}/apache-ignite-{{ignite_version}}-bin/bin/ignite.sh"
   SyslogIdentifier=Ignite
   Restart=on-failure
   RestartSec=5

  [Install]
  WantedBy=multi-user.target
  Alias=ignite.service

1 Ответ

0 голосов
/ 17 марта 2020

По умолчанию Ansible проверяет коды возврата команд. Это поведение по умолчанию можно изменить с помощью методов обработки ошибок.

Ansible обеспечивает failed_when условно, чтобы мы могли определить, что означает «отказ».

Чтение https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html

...