2016-08-09 5 views
4

私はredis-serverのようなサービスをAnsibleによって実行したいと考えています。Ansibleによるサービスステータスの入手方法

私は、システムサービスを停止または開始するためにAnatileサービスモジュールを使用する方法を知っています。しかし、どのようにして現在のサービスステータスを取得できますか?

+1

は、あなたのタスクを説明してください。あなたは通常、物事をどのようにしたいのか、そして何も手作業で質問しないようにすることができます。例: 'service:name = httpd state = started'。 –

答えて

1

commandモジュールをservice redis-server statusと使用し、stdoutを解析します。
サービスモジュールpatchedを使用してください。

+0

'' 'service redis-server status''このコマンドは異なるOSで異なる結果を表示します。 – Moxmi

+0

このパッチは良いですが、私はそれを自分で達成したいです...しかし、私はどこに玄関があるのか​​見つけられませんでした – Moxmi

+0

私はモジュールをカスタム化し、それを解決しました。 – Moxmi

1

通常、これはAnsibleで行いません。サーバーをどのように見せたいかを宣言的に定義する必要があります。構成が変更されたが、それはに稀であるだろうというときのRedisを再起動するには

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

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

あなたは条件付きでこのようなことを行うことがありますような何かをあなたが通常だけでしょう。このよう

サービスが実行されているかどうかを確認する必要があります。あなたはサービスが実行されている(と私はあなたがあなたのAnsible役割/脚本についてもう一度考えていることを強く示唆している)かどうかを確認する必要があります絶対場合

、あなたはいつも殻から取り出すことができます:

- 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

個人的には、私の環境の中で私のサービスのステータスを取得し、それらを再起動できるように、何らかの種類のPlaybookを持っています。

したがって、私はコマンドモジュールの片側をKonstantin Suvorovで推奨されているように使用しますが、必要なポートがすべて稼働し、サービスが期待通りに機能することを確認するために、期待されるポートも確認します。 これはあなたのケースで、次のようになります。コマンドモジュールは常にtrueに変更しますので、それだけで読み取り専用のコマンドですが

- 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" 
       }, 
       ... 
      } 
     } 
    } 
} 
関連する問題