※当サイトの記事には、広告・プロモーションが含まれます。

Ansibleで定義した変数がどのタイミングで有効になるのかを知りたいだけ...

gigazine.net

世界最大のプレプリントサーバーである「arXiv」は、物理学や数学、コンピューターサイエンス、統計学などの分野において論文のアップロードやダウンロード機能を無料提供しており、学問の発展において重要な役割を果たしています。そんなarXivは1人の物理学者のコードから生まれました。

現代科学を支える巨大プレプリントサーバー「arXiv」はどのようにして生まれたのか? - GIGAZINE

さらにギンスパーグ氏のもとに、ある物理学者から「旅行中にメールで送信されてきた論文によってコンピューターのストレージが一杯になってしまう」との陳述が届きます。これを重く見たギンスパーグ氏はコーン氏の勧めもあり、論文の配布を自動化するスクリプトをわずか1日で作成しました。当時を振り返ったコーン氏は「ギンスパーグ氏には先見の明がありました」と語っています。

現代科学を支える巨大プレプリントサーバー「arXiv」はどのようにして生まれたのか? - GIGAZINE

こうして誕生したarXivでしたが、当初はただの自動化された電子メールサーバーでした。その後、1994年にアメリカ国立科学財団からの助成金を元に、より信頼性の高いPerlコードに移行しています。

現代科学を支える巨大プレプリントサーバー「arXiv」はどのようにして生まれたのか? - GIGAZINE

その後、2001年にギンスパーグ氏はコーネル大学図書館にarXivの運営を移管しました。しかし、ギンスパーグ氏が構築した複雑かつ膨大な量のコードは移管されたコーネル大学図書館に大きな混乱をもたらすことになります。

現代科学を支える巨大プレプリントサーバー「arXiv」はどのようにして生まれたのか? - GIGAZINE

2019年にはarXivコーネル大学コンピューティングおよび情報科学部門に移管されます。しかし、数カ月語には営利目的の学術出版のバックグラウンドを持つ新たなディレクターが引き継ぐなど、arXivの管理体制に混乱が生じました。arXivのある従業員は「arXivにとって良好な時期ではありませんでした」と語りました。

現代科学を支える巨大プレプリントサーバー「arXiv」はどのようにして生まれたのか? - GIGAZINE

それでも、2023年にはサイモンズ財団やアメリカ国立科学財団による約15億円もの資金提供を受けたほか、コーネル大学の教授であるラミン・ザビ氏がファカルティディレクターに就任するなど、新たなガバナンス構造の下で、arXivクラウドへの移行と、Pythonへのリファクタリングなどが進められています。

現代科学を支える巨大プレプリントサーバー「arXiv」はどのようにして生まれたのか? - GIGAZINE

⇧ 1日で自動化スクリプトを完成させてるのは驚きですが、記事の内容を見た限りでは、保守・運用で四苦八苦していそうね...

『「AI」に任せれば良いので「プログラミング」の学習は不要』と仰っておられる方は、こういった問題もさぞかし華麗に解決してくださるんでしょうね。

Ansibleで定義した変数がどのタイミングで有効になるのかを知りたいだけ...

公式のドキュメントによると、

docs.ansible.com

変数を設定する場所

変数は、インベントリー、Playbook、再利用可能ファイル、ロール、コマンドラインなど、さまざまな場所で定義することができます。 Ansible は、検出可能なすべての変数を読み込み、変数の優先順位ルール に基づいて適用する変数を選択します。

https://docs.ansible.com/ansible-core/2.15_ja/playbook_guide/playbooks_variables.html#ansible-variable-precedence

⇧ とあるのだが、「検出可能」になるタイミングが知りたいのだが、肝心の部分が記載されていないのよね...

つまり、どのタイミングで「変数」が「Ansible」から認識されるのかがサッパリ分からない...

一応、公式のドキュメントの「Ansible Playbook の使用」のページによると、

docs.ansible.com

Playbookの実行

Playbook は、上から下に向かって順番に実行されます。各プレイの中では、タスクも上から下の順に実行されます。

 

https://docs.ansible.com/ansible-core/2.15_ja/playbook_guide/playbooks_intro.html#playbook-syntax

 

⇧ 上記に上から順に処理されるとある。

ということは、

docs.ansible.com

⇧「変数の優先順位について」で「優先順位」が低いもの(項番の数字が小さいもの)ほど、「Ansible」の「検出可能」になるタイミングが早いということになると思われる。

なるほど、「動的インベントリ」の「host_vars」で定義された「変数」は、

  1. インベントリーファイルまたはスクリプトホスト変数

に該当するらしいので、

  1. インベントリー host_vars
  2. playbook host_vars
  3. ホストファクト / キャッシュ済み set_facts
  4. プレイ変数
  5. play vars_prompt
  6. play vars_files
  7. role 変数 (role/vars/main.yml で定義)
  8. ブロック変数 (ブロックのタスクにのみ適用)
  9. タスク変数 (タスク専用)
  10. include_vars
  11. set_facts / 登録変数
  12. role (および include_role) パラメーター
  13. include パラメーター
  14. 追加の変数 (例: -e "user=my_user")(常に優先されます)

の中で「変数」を定義する時に、「host_vars」で定義された「変数」を利用してもエラーにならないということですかね。

⇧ とあるように「上書き」については言及があるのだが、「変数」が「有効」になるタイミングについては言及されておらんのよね...

「動的インベントリ」の「host_vars」の「変数」を、別の場所の「変数」定義の値として利用している場合に、自動で更新されていってくれるんだろうか...

気にしているのは、「動的インベントリ」で複数のホストの定義がある場合に、別の場所の「変数」定義の値として利用している「host_vars」の「変数」の値も反映されていってくれるのかがハッキリしない...

まぁ、「変数の優先順位について」で「優先順位」が低いもの(項番の数字が小さいもの)ほど早いタイミングで「変数」が「有効」になると考えていけば良いと信じていきますか。

毎度モヤモヤ感が半端ない…

今回はこのへんで。