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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ansible

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

6835閲覧

Ansibleで「|」(パイプ)の意味とdefaultの意味がわからない

parapa

総合スコア17

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ansible

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2019/02/28 02:48

コード

yml

1- name: Start services 2 service: 3 name: '{{ item.name }}' 4 enabled: '{{ item.enabled | default("yes") }}' 5 state: '{{ item.state | default("started") }}' 6 with_items: 7 - name: httpd 8 - name: mysqld

不明点

{{ item.name }}の部分は理解しております。

パイプの動作があまり良くわかっておりません。
パイプの左側が真ならば左を、偽なら右をということだと思っています。

具体的にはenabledの場合は値として「yes」か「no」をとるとのことです。
つまりitem.enabledの部分は動的に「yes」か「no」をとる。
しかし初回はなにも格納させていないので偽判定となり、右側のyesになるのでしょうか。

これはstateの場合、仮にstoppedが動的に取得された場合には自動的に再起動しないと思うのですが
コードとして正しいのでしょうか。

またdefault("文字列")の動きも教えていただきたいです。
単純にdefaultであることを明示するためのあってもなくてもいいもの。
ということでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

フィルターといわるものですね。

「左側の値を使って右側の処理をする」なので以下は間違ってます。

パイプの左側が真ならば左を、偽なら右をということだと思っています。

例えば

to_jsonフィルターを使用するとitem.enabledの値をjsonに変換します。

{{ item.enabled | to_json }}

maxフィルターを使うと最大値が取得できるので4が設定されます。

{{ [3, 4, 2] | max }}

defaultフィルターは左側が未定義だっとときに定義した値を使用します。
以下だと item.enabled が未定義の場合はyesとなります。
もしdefaultフィルターを使用してない場合は未定義なのでエラーになります。

{{ item.enabled | default("yes") }}

Jinja2というPythonのテンプレートエンジンを使用しているのでJinja2などでググると理解が深まると思います。

Jinja2のドキュメント
http://jinja.pocoo.org/docs/2.10/

Ansibleが用意しているフィルターのドキュメント
https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html

投稿2019/02/28 04:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

parapa

2019/02/28 06:03

非常にわかりやすい回答ありがとうございます。 ということはitem.stateはstarted,stopped,restarted,reloadedの4つを取るらしいのですが、 stateがstoppedになっていた場合このコードだと再起動しないということ理解であっているでしょうか。 参考:https://qiita.com/moiwasaki/items/c320c7073a7ef086c5c9
退会済みユーザー

退会済みユーザー

2019/02/28 08:13

そのままstoppedがセットされるので再起動にはならず停止すると思います。
parapa

2019/03/01 08:52

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問