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

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

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

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

Q&A

2回答

633閲覧

【Ansible】コードの読み方の確認

naoccoo

総合スコア0

Ansible

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

0グッド

0クリップ

投稿2021/06/14 09:56

ansibleについて、下記①②③いずれかだけでも回答いただけますと幸いです。

①下記のコードが何を意味して、何を実行しているのかを知りたいです。

私なりに解釈をしている内容は下記の通りです。
・hoge2の中のregisteridの結果をitemとして格納する。
ただし、itemの中のregisteridの値がhogehogeの時に格納する。

- name: sample set_fact: hoge1: "{{ item }}" loop: "{{ hoge2 }}" when: item.registerid == "hogehoge" ※hoge2はここ以前で定義済みでjsonの結果が格納されています。

②上記のコード例で、registeridがhogehoge以外の名称をすべて
itemに格納する方法はあるでしょうか。

下記のような記載をしたところ、hoge2の内、ひとつだけしか格納されず、
思ったような動きとはなりませんでした。
①の認識がそもそも誤っているのか、②の方法が違うのか判断ができずにおります。

- name: sample set_fact: hoge1: "{{ item }}" loop: "{{ hoge2 }}" when: item.registerid != "hogehoge" ※ 「==」 → 「!=」 と変更

③ansibleを勉強するためにおすすめの書籍やサイトがありましたら教えていただきたいです。

ansibleも本サイトも完璧な初心者ですので、
不足している情報などありましたらお手数ですがご指摘いただけますと幸いです。

お力添えの程、何卒よろしくお願い申し上げます。

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

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

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

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

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

guest

回答2

0

②ですが、jsonを以下の形のように変えたいということですよね?

diff

1{ 2- "hoge2": [ 3+ "hoge1": [ 4- {"registerid": "hogehoge"}, 5 {"registerid": "fuga"}, 6 {"registerid": "hoge"}, 7 {"registerid": "fugafuga"} 8 ] 9}

であれば、以下の形ではどうでしょうか。

yaml

1- name: sample 2 set_fact: 3 hoge1: "{{ hoge1 | default([]) + [item] }}" 4 loop: "{{ hoge2 }}" 5 when: "item.registerid != 'hogehoge'" 6

初回ループ時には、hoge1は未定義のため空リストになります。
そして、registeridがhogehogeでない場合は該当のitemをリストとしてhoge1と結合する、ということを繰り返します。

json_queryでもうまくやれそうな気はします。

投稿2021/06/15 02:26

hondak

総合スコア2

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

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

0

例えば、hoge2が以下のような構成になっているということでしょうか?
以下の説明はこの構成を前提にします。

yaml

1hoge2: 2 - registerid: hogehoge 3 - registerid: fuga 4 - registerid: hoge 5 - registerid: fugafuga

jsonだとこんな感じ

json

1{ 2 "hoge2": [ 3 {"registerid": "hogehoge"}, 4 {"registerid": "fuga"}, 5 {"registerid": "hoge"}, 6 {"registerid": "fugafuga"} 7 ] 8}

①の説明

loophoge2を回すので、その配列の1行ずつの値が itemに格納されます。
その itemのプロパティregisteridhogehogeならば、
hoge1itemを代入する。

つまり、hoge1の値はregisterid: hogehogeになります。

②の説明

条件式の理解は問題ないですが、whenの文字比較に罠があって、以下のようにしないと正常に動作しません。

yaml

1when: "item.registerid != 'hogehoge'"

自分の記事で恐縮ですがw
https://qiita.com/comefigo/items/a37b47f394f0a9a3e518

投稿2021/06/14 10:20

comefigo

総合スコア1045

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問