ansible запустить процесс, если не работает с помощью ps

я использую ansible для запуска процесса namenode, если он не запущен, я используюjps, чтобы проверить процесс и проверить статус использования service_namenode_statusи начать процесс, используя service_namenode_startлюбую идею, как использовать это правильно…?

  - name: Check if Namenode is running
    shell: jps | grep " NameNode" | grep -v grep
    ignore_errors: yes
    changed_when: false
    register: service_namenode_status

  - name: Report status of Namenode
    fail:
      msg: |
        Service NameNode is not running.
        Return code from `jps | grep " NameNode" | grep -v grep`:
        {{ service_namenode_status.rc }}
    when: service_namenode_status.rc != 0
    register: service_namenode_start

  - name: Start Namenode
    command: su - hdfs -c "/usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode"
    tags: namenode
    when: service_namenode_status.rc != 0

ВЫХОД:

TASK [namenode : Check if Namenode is running] *********************************
fatal: [server1.hdp.vagrant.data.uc]: FAILED! => {"changed": false, "cmd": "jps | grep " NameNode" | grep -v grep", "delta": "0:00:00.192755", "end": "2016-11-09 10:59:10.360552", "failed": true, "rc": 1, "start": "2016-11-09 10:59:10.167797", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []}
...ignoring

TASK [namenode : Report status of Namenode] ************************************
fatal: [server1.hdp.vagrant.data.uc]: FAILED! => {"changed": false, "failed": true, "msg": "Service NameNode is not running.nReturn code from `jps | grep " NameNode" | grep -v grep`:n1  n"}

NO MORE HOSTS LEFT *************************************************************

RUNNING HANDLER [metastore : restart postgresql] *******************************
    to retry, use: --limit @/Users/krisdigitx/myLab/hdp/provisioning/site.retry

PLAY RECAP *********************************************************************
server1.hdp.vagrant.data.uc : ok=86   changed=32   unreachable=0    failed=1

Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

1 ответ

  1. Попробовать это:

    - name: Check if Namenode is running
      tags: namenode
      shell: jps | grep " NameNode" | grep -v grep
      ignore_errors: yes
      changed_when: false
      register: service_namenode_status
    
    - name: Start Namenode
      tags: namenode
      command: su - hdfs -c "/usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode"
      when: service_namenode_status.rc == 1
    

    Мои изменения были:

    1. Я добавил строку» tags: namenode » в 1-ю часть; вам нужно будет собрать значение регистра, если вы фильтруете по этому тегу

    2. Я удалил вашу 2-ю часть и пошел прямо на 3-ю.

    Похожая конфигурация работает для меня для подобной проблемы.