Если у вас есть список, и вам нужны только первые три элемента в списке, вы можете использовать нарезку списка, чтобы получить это. Например, следующий playbook:
---
- gather_facts: false
hosts: localhost
vars:
statusapplication:
stdout_lines: [
"httpd.service - The Apache HTTP Server",
" Loaded: Loaded (/usr/lib/systemd/system/httpd.service; disabled)",
" Active: active ....",
" Docs: man:httpd(8)",
" Process: .....",
]
tasks:
- debug:
msg: "{{ item }}"
loop: "{{ statusapplication.stdout_lines[:3] }}"
Будет выводить:
TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => (item=httpd.service - The Apache HTTP Server) => {
"msg": "httpd.service - The Apache HTTP Server"
}
ok: [localhost] => (item= Loaded: Loaded (/usr/lib/systemd/system/httpd.service; disabled)) => {
"msg": " Loaded: Loaded (/usr/lib/systemd/system/httpd.service; disabled)"
}
ok: [localhost] => (item= Active: active ....) => {
"msg": " Active: active ...."
}
Если ваша цель на самом деле извлечь информацию из этих строк, вы можете вместо этого использовать set_fact
для создания серии переменных и явно ссылаются на каждую строку по индексу:
---
- gather_facts: false
hosts: localhost
vars:
statusapplication:
stdout_lines: [
"httpd.service - The Apache HTTP Server",
" Loaded: Loaded (/usr/lib/systemd/system/httpd.service; disabled)",
" Active: active ....",
" Docs: man:httpd(8)",
" Process: .....",
]
tasks:
- set_fact:
service_name: "{{ statusapplication.stdout_lines[0] }}"
service_loaded: "{{ statusapplication.stdout_lines[1].split()[1] }}"
service_status: "{{ statusapplication.stdout_lines[2].split()[1] }}"
- debug:
msg: "Service '{{ service_name }}' is {{ service_loaded }} and {{ service_status }}."
Что выводит:
TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "Service 'httpd.service - The Apache HTTP Server' is Loaded and active."
}
Но для того, что вы пытаетесь сделать, вместо этого вы можете захотеть исследовать Ansible '* service_facts
модуль, который будет возвращать информацию о запущенных сервисах в структурированном формате.
Например:
---
- gather_facts: false
hosts: localhost
tasks:
- service_facts:
- debug:
msg: "{{ services['sshd.service'] }}"
Который выдает:
TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
"msg": {
"name": "sshd.service",
"source": "systemd",
"state": "running",
"status": "enabled"
}
}