2016-08-09 2 views
4

Я хочу получить услугу как redis-server Статус выполнения от Ansible.Как получить статус сервиса Ansible?

Я знаю, как использовать сервисный модуль Ansible для остановки или запуска обслуживания системы. Но как я могу получить статус текущего сервиса?

+1

Опишите вашу задачу. Обычно вы просто хотите сказать правду о том, как вы хотите, и не запрашивать ничего вручную, например: «service: name = httpd state = started». –

ответ

1

Использовать модуль command с service redis-server status и разобрать stdout.
Или используйте patched сервисный модуль.

+0

'' service redis-server status''', эта команда будет иметь разные результаты для разных ОС. – Moxmi

+0

Это исправление лучше, но я хочу добиться этого сам ... но я не мог найти, где находится вход – Moxmi

+0

Я настраивал модуль и разрешал его. – Moxmi

1

Вы не обычно делали бы это с помощью Ansible. Необязательный должен быть для декларативного определения того, как вы хотите, чтобы сервер выглядел.

Таким образом вы обычно просто сделать что-то вроде:

- name: start redis 
    service: 
    name=redis-server 
    state=started 
    enabled=yes 

Вы могли бы сделать что-то условно так:

- name: restart redis 
    service: 
    name=redis-server 
    state=restarted 
    enabled=yes 
    when: redis_config.changed 

Чтобы перезапустить Redis, когда конфигурация была изменена, но это будет редко необходимо проверить, работает ли служба.

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

- name: check redis status 
    shell: service redis-service status 
+0

Я не мог понять это ... пожалуйста, дайте мне несколько раз, я не использую Ansible таким образом. – Moxmi

+0

Thx, я пишу настраиваемый модуль для его решения. – Moxmi

0

Просто запустите задачу service: name=httpd state=started с опцией --check. Это говорит вам, если служба должна быть запущена, а это значит, что она не работает. Если задача не изменится, она уже завершена.

Пример обслуживание вниз, changed верно, потому что он должен быть запущен:

$ ansible -m service -a 'name=rpc/bind state=started' --check host 
host | SUCCESS => { 
    "changed": true, 
    "msg": "service state changed" 
} 

Пример службы до, change является ложным, потому что бездельники нужно сделать:

$ ansible -m service -a 'name=system-log state=started' --check host 
host | SUCCESS => { 
    "changed": false, 
    "name": "system-log", 
    "state": "started" 
} 
1

Лично мне нравится иметь какую-то поддержку в Playbooks для получения статуса моих услуг в моей среде и для их перезапуска и т. Д.

Поэтому я буду использовать с одной стороны командный модуль в соответствии с рекомендациями Konstantin Suvorov, но кроме того, я также проверю ожидаемый порт (ы), чтобы убедиться, что все необходимые порты включены, и моя служба работает должным образом. Это будет выглядеть следующим образом в вашем случае:

- name: verify redis-server service 
    command: /usr/sbin/sservice redis-server status 
    changed_when: false 

- name: verify redis-server is listening on 6379 
    wait_for: port=6379 timeout=1 

changed_when используется только потому, что командный модуль всегда будет установлен изменен так, хотя это просто команда только для чтения.

4

Вы также можете использовать плагин scan_services.

mkdir -p library 
cd library 
curl -sSL -O https://github.com/ansible/awx/raw/devel/awx/plugins/library/scan_services.py 

Пример использования:

- name: collect facts about system services 
    scan_services: 
    register: services_state 

- name: Debug 
    debug: 
    var: services_state 

Пример вывода:

... 

TASK [Debug] *************************************************************************************************************************************************************************************************************** 
ok: [local] => { 
    "services_state": { 
     "ansible_facts": { 
      "services": { 
       "cloud-init-local.service": { 
        "name": "cloud-init-local.service", 
        "source": "systemd", 
        "state": "stopped" 
       }, 
       "firewalld.service": { 
        "name": "firewalld.service", 
        "source": "systemd", 
        "state": "stopped" 
       }, 
       ... 
      } 
     } 
    } 
} 
Смежные вопросы