質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

1回答

442閲覧

Ansible if文が構文エラーになる

khaii21

総合スコア66

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2023/05/13 10:30

編集2023/05/17 01:21

実現したいこと

サービスの状態がrunningでない場合、起動させたい
その際、リトライ数3回、1回につき10秒の待ち時間を設定

インデントの問題だと考えて調整してみましたが解消しません。
何かお気づきのことがありましたらご教授頂けないでしょうか。
宜しくお願い致します。

発生している問題・エラーメッセージ

Syntax Error while loading YAML. found character that cannot start any token The error appears to be in 'test.yml': line ??, column ?, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: var: chk_hoge {% if chk_hoge.status.SubState != "running" retries:3 delay:10 %} ansible.builtin.service: name: hoge state: started ^ here

該当のソースコード

test.yml

1- name: Chefk running of hoge 2 ansible.builtin.systemd: 3 name: "hoge.service" 4 register: chk_hoge 5- name: Check result 6 ansible.builtin.debug: 7 var: chk_hoge 8 {% if chk_hoge.status.SubState != "running" retries:3 delay:10 %} 9- name: Start hoge when not running 10 ansible.builtin.service: 11 name: hoge 12 state: started 13 {% endif %}

試したこと

nameディレクティブを外してもエラーになります

{% if chk_hoge.status.SubState != "running" retries:3 delay:10 %} ansible.builtin.service: name: hoge state: started {% endif %}

%にハイフンを付けても解消しませんでした

{%- if chk_hoge.status.SubState != "running" retries:3 delay:10 -%} ansible.builtin.service: name: hoge state: started {%- endif -%}

当初は下記のuntilを使いましたが、lintでif文を促されました

- name: Check result ansible.builtin.debug: var: chk_hoge - name: Start hoge when not running ansible.builtin.service: name: hoge state: started until: chk_hoge.status.SubState != "running" retries:3 delay:10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yabusakadeny

2023/05/13 11:05

直接の回答では有りませんが、ansible.builtin.service モジュールは、特に何もしなくてもサービスの起動まである程度くれるきがします。 そもそも if で囲わなかないで普通にansible.builtin.service モジュールを実行すると、どうなるのでしょうか?
khaii21

2023/05/13 11:12

ご確認ありがとうございます。 実は該当のサービスにはバグがありまして、状況により1回では起動しないケースがあります。 そのため、3回程度リトライ処理を入れたいと考えています。
guest

回答1

0

ベストアンサー

コメントで情報いただきありがとうございます。

不具合を再現できる環境はありませんが、以下のような形でどうでしょうか。if は不要です。

yaml

1- name: Start hoge when not running 2 ansible.builtin.service: 3 name: hoge 4 state: started 5 register: result 6 retries: 3 7 delay: 10 8 until: result is succeeded

ただ、

実は該当のサービスにはバグがありまして、状況により1回では起動しないケースがあります。

とのことなので、この現象によってはカスタムする必要があるかもしれません。

投稿2023/05/13 11:32

編集2023/05/13 11:44
yabusakadeny

総合スコア184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

khaii21

2023/05/13 11:40

ご回答ありがとうございます。 こちら頂きました内容で動作検証を進めてみます。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問