問題タブ [ansible-runner]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Ansible をプログラムで同時に実行するにはどうすればよいですか?
Ansible を使用して、複数のリモート ノードで単純なジョブを同時に実行したいと考えています。実際の作業では、いくつかのログ ファイルを grep し、ローカル ホスト (リモート ノードでは使用できないソフトウェアを使用) で結果を後処理します。
コマンド ラインの ansible ツールは、リモートで実行されたコマンドの出力と ansible によって生成された書式設定が混在しているため、このユース ケースには適していないようです。ただし、Python API は、出力を変更せずに公開するため、これが可能であるように思われます (ここでは関係ない可能性のある Unicode マングリングは別として)。
私が思いついた Python プログラムの簡略化されたバージョンは次のようになります。
ここでsleep 10
は、実際のログ grep コマンドを代用しています。アイデアは、すぐには完了しないコマンドをシミュレートすることです。
ただし、これを実行すると、かかる時間がインベントリ内のホストの数に比例しているように見えます。それぞれ 2、5、および 9 ホストのインベントリに対するタイミング結果を次に示します。
その他のランダムな観察:
ansible all --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
同じ挙動を示しますansible all -c local --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
物事を同時に実行しているように見えます(もちろん、ローカルのみの接続でのみ機能します)ansible all -c paramiko --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
物事を同時に実行しているように見える
おそらくこれは、問題が ssh トランスポートにあることを示唆しており、コマンドラインからではなく、Python API を介して ansible を使用することとは何の関係もありません。
インベントリ内のホストの数に関係なく、デフォルトのトランスポートに約 10 秒しかかからないのは何が問題なのですか?
python - Python API を使用して ansible-playbook を実行する
Pythonスクリプトでプレイブックを実行するにはどうすればよいですか? Python で ansible モジュールを使用すると、次のようになります。
http://docs.ansible.com/developing_api.htmlで彼らのドキュメントを見ていましたが、例は非常に限られています。
python - Play としてローカル ファイルを使用しながら、プログラムで ansible play を実行するにはどうすればよいですか?
セットアップ/制約
/tmp/run_tests.yml にある ansible play を実行したいのですが、コマンドラインではなく Python スクリプトで実行したいと考えています (これらは、私が取り組んでいる問題に対する一般的な制約です)。私はいくつかの異なるアプローチを試しましたが、いずれも Runner クラスのリバース エンジニアリングに関する当て推量のように感じましたが、うまくいきませんでした。これが可能かどうか、そしてコードがどのようになるかを知りたいと思っていました。
単一のコマンドを実行したい場合は、Ansible API のランナーを使用するだけです。
works.py (モジュールでランナーを使用する簡単な例)
doesnotwork.py (ランナーを遊びで使おうとしている)
エラーが発生しました
ソースから、エラーはシバンが欠落していることを示唆しています。私のpythonプレイを実行するには、ランナーコマンドはどのように見える必要がありますか?
python - dir /$HOME/.ansible/cp を作成できませんでした: [Errno 13] 許可が拒否されました: '/$HOME
ansibleパッケージを使用して一部のリモート サーバーに ping を実行する Python スクリプトがあります。手動で実行した場合 ( python devmanager.py ) は正常に動作しますが、スクリプトがスーパーバイザーで管理されている場合、次のエラーが発生します。
ansible コマンドは非常に単純です。
ソース システムとターゲット システムで同じユーザー。$HOME フォルダーのアクセス許可を確認しましたが、奇妙なものは見つかりませんでした。
何が起こっているのか分かりますか?$HOME 変数を変換することを知らないのですか?
python - ansible runner が長く実行される
ansible の python API を使用してリモート マシン (数千台) でスクリプトを実行すると、コードは次のようになります。
それから、私は使用します
これには時間がかかりすぎます。データ構造 stdout を MySQL に挿入したいと考えています。私が望むのは、マシンがデータを返したら、そのデータを MySQL に挿入し、すべてのマシンが戻るまで次のデータを挿入することです。
これは良い考えですか、それとももっと良い方法がありますか?
python - プログラムで ansible runner からイベントを読み取る方法
ansible runnerを使用して、正常に動作する Django アプリケーションから ansible-playbook をトリガーします。次のコードを参照してください。
私がやろうとしているのは、プロジェクトで展開が発生するたびに、ライブ更新 (そのプレイブック内で実行されている各 ansible タスクの stdout) をユーザーに提供することです。
今のところ、コンソールですぐに stdout を確認できます。しかし、ansible ランナーから stdout をインタラクティブに/瞬時に読み取る方法がわかりません。
タスクが完了するのを待って、最終的な stdout を読み取ってユーザーに表示することができますが、これはユーザー エクスペリエンスが向上するとは思えません。ユーザーに起こっているプレイのライブ更新を提供したいと思います。travis-ci ビルドで見られるものと同様です。これまでのところ、ansible-runner のドキュメントから何も理解できません。
r.events
以下のような出力を調べてみました
基本的にこれr[1]
はジェネレータ オブジェクトですが、ループを実行すると、開始点から数行しか出力されません。これは、タスクがまだ完了していないためであると想定しているため、ジェネレータにもまだ値が設定されていません。
私を正しい方向に導くことができるあなたの提案やリンクは何ですか? ご不明な点がございましたら、お気軽にお問い合わせください。助けてくれてありがとう:)
ansible - ネストされた辞書を extra_vars として ansible-playbooks に渡す
extra_vars
巨大なネストされた辞書をAnsibleとして渡したいですplaybook
。そのディクショナリの値をプレイブックで使用したいと考えています。
このディクショナリを渡してextra_var
、その値を使用したいと考えています。jinja
テンプレートを使用して辞書から個別の値にアクセスできません。
例: のマークの値を使用したい場合ansible-playbook
、どうすればアクセスできますか?
私は使用してpython3.5
おり、モジュールを使用してプレイブックを実行していますansible 2.8.
。ansible-runner