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

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

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

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

Q&A

解決済

2回答

372閲覧

ansible collection をオンデマンドにインストールすることは可能でしょうか?

mit0223

総合スコア3401

Ansible

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

0グッド

1クリップ

投稿2020/07/31 00:29

編集2020/07/31 00:47

ansible 2.10 がもうすぐリリースされますが、それに合わせて、既存コードを修正して ansible-base + ansible-galaxy install xxx で collection分離のメリットを得ようと考えています。このとき、 collection のインストールをオンデマンドに行うようにすることは可能でしょうか?
例えば、

yml

1- name: create EC2 instance 2 ec2_instance: 3 ...

という既存コードがある場合、

ansible-galaxy install community.aws

を実行したうえで

yml

1- name: create EC2 instance 2 community.aws.ec2_instance: 3 ...

に変更する必要がある認識です(すみません、やってみたことがないです。認識が違っていたら教えて下さい)。
このとき、そのコードが AWS 以外にも Azure や GCP もサポートしていて、ec2_instance
モジュールを呼び出さないときもある場合に、インベントリの内容によって、
ansible-galaxy install community.aws をオンデマンドに実行することは可能でしょうか?

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

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

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

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

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

guest

回答2

0

自己解決

ansible, ansible-galaxy にも特にオンデマンドインストールのための仕組みはないようですので、あきらめて、 requirements.yml に必要なものを書いて、事前に使う可能性がある collection をすべてインストールしておくことにします。

投稿2020/08/05 04:00

mit0223

総合スコア3401

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

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

0

「オンデマンド」というのはどのタイミングのことを指しているのでしょうか?
例えば、Ansibleのplaybook実行中のことを指しているのか?それともplaybook実行前のことを指しているのですか?

投稿2020/08/01 05:55

comefigo

総合スコア1045

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

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

mit0223

2020/08/01 09:00

playbook実行中です。インベントリをみて必要なときだけインストールされるようにしたいです。
mit0223

2020/08/01 22:28

あ、 playbook 実行前でもいいかもです。インベントリの値によってインストールされる collection を選択したいです。 requirements.yml に when とか書きたいです。
comefigo

2020/08/02 03:58 編集

たぶんplaybook実行前のほうがスマートだと思います。 ただ、playbook実行時にコードの静的解析でインストールしていないcollectionがエラーにならなければいいんですが、それは検証が必要ですね。
mit0223

2020/08/02 07:22

少し、背景を言いますと、ansible で書かれたサイト構築ツールを書いてておりまして、そのツールが AWS, Azure, GCP をサポートしています。https://github.com/procube-open/hive-builder ですので、解析と言ってもインベントリの変数を参照するだけで、 collection を限定できます。その場合、ベストの方法は requiremets.yml をjinja2 で生成して ansible-galaxy を実行ですかね?
comefigo

2020/08/02 11:01 編集

なるほどですね。 変数で処理分岐されると思いますが、例えば1つのplaybook内で変数によってプラットフォーム(aws、azure、gcp)を分岐するような仕組みだと、playbookの実行時にコード解析が実行され、モジュールがないとエラーになる可能性があるということです。 例えば、以下のようなplaybookになっているとします。 --- community.aws.ec2: 中略 when: platform == 'aws' google.cloud.gcp_compute_instance: 中略 when: platform == 'gcp' --- 上記のように実行時にgcp関連のコードが含まれていることでエラーになる可能性があるということです。 そのような作りになっていなければ、問題ないかと思います。 サイト構築ツールを構築する段階で使用するプラットフォームをパラメータで注入し、makeか何かで自動生成させるのもありかと思います。また、前提から崩れてしまいますが、すべてのプラットフォームのモジュールを含めてしまうのもありかと思います。
mit0223

2020/08/02 11:56

> 上記のように実行時にgcp関連のコードが含まれていることでエラーになる可能性があるということです。 なるほど。分岐に使用しているのは include_role なのですが、エラーになるでしょうか? --- include_role: name: "{{ platform }}" --- みたいな感じです。 include_role で include されない role に未インストールのモジュールが出てきたときにエラーになるかどうかですね。
comefigo

2020/08/02 14:13

そうですね。 include_roleでエラーになるかは試してみないとわからないですね。
mit0223

2020/08/03 15:31

> すべてのプラットフォームのモジュールを含めてしまうのもありかと思います。 質問の意図としては、ベストプラクティスはどうかということだったので、ansible 自身にその仕組がないのであれば、オンデマンドはあきらめて、requirements.yml ですべてインストールするようにしようと思います。
comefigo

2020/08/04 00:16

失礼しました。確かに質問の意図から逸れてしまいましたですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問