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

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

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

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

Q&A

解決済

1回答

862閲覧

Ansible lintのチェックでsyntax-checkのエラーが解消できない

khaii21

総合スコア67

Ansible

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

0グッド

0クリップ

投稿2023/07/04 08:29

編集2023/07/05 08:25

実現したいこと

roles配下のディレクトリに配置しているタスクのymlをimport_roleで取り込みたいです。

playbook自体のタスクは成功します。ただしlintによるチェックで
ロールが見つからないというsyntax-checkのエラーが解消出来ません。
どうすればエラーを解消できるのか何かお気づきの方がいらっしゃいましたら
ご教授頂けないでしょうか。
宜しくお願い致します。

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

syntax-check[specific]: the role 'vip' was not found in <サーチ対象となっている複数のディレクトリのpathが出力されている> playbook/roles/release/tasks/main.yml:4:11 Rule Violation Summary count tag profile rule associated tags 1 syntax-check[specific] min core, unskippable Failed after : 1 failure(s), 0 warning(s) on 15 files.

該当のソースコード

playbook ├── playbook.yml ├── roles │ ├── deploy │ │ └── tasks │ │ └── deploy.yml │ ├── hoge │ │ └── tasks │ │ └── check_hoge.yml │ ├── release │ │ └── tasks │ │ └── main.yml │ └── vip │ └── tasks │ ├── service_in.yml │ └── service_out.yml └── vars └── main.yml

playbook.yml

1--- 2- name: Release Playbook 3 hosts: all 4 gather_facts: false 5 roles: 6 - release

playbook/roles/release/tasks/main.yml

1--- 2- name: Import service_out.yml 3 ansible.builtin.import_role: 4 name: vip 5 tasks_from: service_out.yml 6 tags: service_out 7- name: Import deploy.yml 8 ansible.builtin.import_role: 9 name: deploy 10 tasks_from: deploy.yml 11 tags: deploy 12- name: Import check_hoge.yml 13 ansible.builtin.import_role: 14 name: hoge 15 tasks_from: check_hoge.yml 16 tags: check_hoge 17- name: Import service_in.yml 18 ansible.builtin.import_role: 19 name: vip 20 tasks_from: service_in.yml 21 tags: service_in

試したこと

playbook.ymlのrolesにrelease以外のディレクトリも追加したがだめだった

--- - name: Release Playbook hosts: all gather_facts: false roles: - release - vip - deploy - hoge

補足情報(FW/ツールのバージョンなど)

Ansible 8

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

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

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

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

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

guest

回答1

0

ベストアンサー

the role 'vip' was not found in <サーチ対象となっている複数のディレクトリのpathが出力されている>
playbook/roles/release/tasks/main.yml:4:11

なぜreleaseロールからvipロールを呼び出しているのですか?
release/tasks/main.ymlのソースを見る限りplaybook側に書くべきでは?と思いました。

投稿2023/07/05 13:28

comefigo

総合スコア1051

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

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

khaii21

2023/07/05 13:49 編集

ご確認ありがとうございます。 ご指摘頂いた内容がきちんと把握できておらず申し訳ございません。 今まではエラーになっていなかったので構文的に問題無いと考えていました。 roles配下にimportする対象を配置しておけばimport_roleをすることによって呼び出せると考えていたのですが 違いましたでしょうか。 >playbook側に書くべきでは これがきちんと理解しておらずイメージがつきませんでした。 もし宜しければどのようにすれば良いのかご教授頂けないでしょうか。
comefigo

2023/07/05 14:31

謝らなくてもよいですよ。 エラーになっていないが、本来のロールの使い方ではないように思います。 ロール(Role)はその名前通りに一つの役割(英語でRole)を担う処理をまとめたものになります。 例えば、Linuxサーバに①Apacheをインストール、②Apacheの設定ファイルの配置、③Apacheのサービスの起動、④公開するコンテンツ(HTML、CSS、画像など)を配置するという一連の処理があるとします。 一連のApache関連の処理(①~③)をapacheロールにまとめることになります。 playbookでは全体(Apacheロールの呼び出し、コンテンツ配置)をコントロールします。
khaii21

2023/07/06 08:49 編集

ありがとうございます。 もう1点お伺いさせて下さい。 タスクを細分化しておき、ケースに合わせて個々のタスクをパーツのように使用したいです。 下記のように release/tasks 配下に配置して、main.ymlの中で import_tasksするやり方は如何でしょうか。 これでエラーが解消できましたので、もし設定方法がおかしくなければこれで対応しようと考えています。 ``` release/tasks/main.yml │ release/tasks/deploy/tasks/deploy.yml │ release/tasks/hoge/tasks/check_hoge.yml │ release/tasks/vip/tasks/service_in.yml │ release/tasks/vip/tasks/service_out.yml ```
comefigo

2023/07/06 09:51

配置場所については、管理しやすさ、使いやすさ(プログラムでいう可読性、可用性など)などを考慮して決めればよいかと思います。正直そこは決めの問題です。 ただ、このスレの質問のようにLintを通したいとなると一般的な構成に従ってチェックされるので、一般的ではない使い方をされるとLintもきちんと判断できずにエラーになると思います。 ちなみにreleaseはroleの下でしょうか?
khaii21

2023/07/06 11:00

>ちなみにreleaseはroleの下でしょうか? はい。releaseだけroles直下に配置しています。
comefigo

2023/07/06 11:30

releaseロールを実行したときに配下のタスクはすべて実行されますか?
khaii21

2023/07/06 11:53

はい。想定どおりに全てのタスクが実行されます。
comefigo

2023/07/06 12:51

であればそのままでよいですね。これもまた決めの問題です。 単純にreleaseロールの単位が大きすぎだと思います。 今時点動作していて、Lintも通っているとのことなので、無理に変更する必要もないと思いますので、このままでよいと思います。
khaii21

2023/07/06 12:54

色々とご教授ありがとうございました。 とても勉強になりました。 大変助かりました。
comefigo

2023/07/06 13:32 編集

playbookは手順書になりますので、繰り返しますが、playbookでは全体の処理をコントロールします。 今の構成では手順書(playbook)の1章(role)にリリースの手順がすべて詰まっている状態です。 結果として正常に実行ができれば問題ないといえば問題ないですが、他の手順書で同じような手順を再利用したいときには都度1章の中のとある手順(tasks_from)を参照してくださいと書くことになるので、わかりづらくなり、コードの保守もしづらくなります。 なので、ほかのplaybookで再利用することがないのであればこのままでよいと思います。 まだピンと来ていないならばとりあえず現状のままで、今後運用していくうちに感覚がつかめてくるかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問