2016-12-22 9 views
1

Я пытаюсь написать код Playbook, где PID удаленного процесса зарегистрирован в качестве переменной, а затем я выполнять другие команды оболочки против этого PID:Использование переменной зарегистрировано в сборник пьес

- name: capture remote pid 
    hosts: web.servers 
    tasks: 
      - name: capture PID 
      shell: ps ax | grep eap | cut -d " " -f1 
      register: pid 
      - name: print PID information 
      shell: ps -ef | grep {{ pid.stdout }} 

Так что с этой простой PlayBook Я бы ожидать, чтобы напечатать информацию процесса с удаленного PID, однако вообще ничего не напечатано:

PLAY RECAP ********************************************************************* 
192.3.9.155     : ok=3 changed=2 unreachable=0 failed=0 

Любая идея, что случилось с ним?

ответ

1

Вы можете использовать pgrep вместо grepping и разрезать результаты ps ax.

Вы также должны учитывать, что происходит, когда у вас есть несколько PID, соответствующих имени процесса. pid.stdout будет содержать многострочный выход. Вместо этого вы должны перебирать pid.stdout_lines.

Наконец, вам нужно отобразить результаты, если вы хотите их увидеть. ps -ef | grep {{ pid.stdout }} в вашей задаче может быть запущен правильно и перенаправить свой вывод на stdout, но Ansible не включает вывод в свой журнал (на экране). Он также станет списком, когда вы выполните итерацию в задаче print PID information.

- name: capture remote pid 
    hosts: web.servers 
    tasks: 
    - name: capture PID 
     shell: pgrep eap 
     register: pid 

    - name: print PID information 
     shell: ps -ef | grep {{ item }} 
     with_items: "{{ pid.stdout_lines }}" 
     register: second_pid 

    - name: display the results in Ansible log (on the screen) 
     debug: 
     var: second_pid 
+0

Благодарим за подробный ответ. Просто примечание, мне пришлось изменить последнюю строку на «debug: var = second_pid», иначе возникнет синтаксическая ошибка. Теперь он работает так, как я ожидал. Благодаря! – Carla

+0

Извините, я не вижу синтаксической ошибки в последней строке, ни мой Ansible. Ваш синтаксис также верен, но нет причин для отказа на YAML-одном. – techraf