ansibleはjarパッケージを呼び出し、結果をターゲットに配布します.
2414 ワード
ansibleは非常に使いやすく、ターゲットマシンにagentがインストールされていない場合、簡単なyaml構文で複雑なメンテナンス機能を実現できます.最近、jarパッケージ実装を呼び出す必要がありますが、ターゲットマシンは空白のマシンで、jdkがインストールされていません.システムとpythonしかありません.この時どうすればいいですか?
イニシアチブ
最初のアイデアは、ansibleコントローラでjarパケットの実行を完了し、jarパケットの実行結果をターゲットマシンにコピーするansible moduleを実現することです.いくつかのコード検証を書いた後、ansibleのmoduleがターゲットマシンで実行されていることがわかり、元のスキームは通用しません.ansibleの関連資料を読んだ後、以下の案を採用した.は、ansibleコントローラ上で実行され、jarがコントローラ上で実行されるansible action pluginを実現する. はansible roleを実現し、このroleは2つのことをします.実装されたばかりのaction pluginを呼び出し、結果をファイルに記録します.結果ファイルをansible copyでターゲットマシンにコピーします.
action plugin
Action pluginは特殊なmoduleで、制御機で実行され、以下のようにテンプレートを実現し、処理ロジックに自分の処理コードを書くことができます.自分の処理結果に基づいてresult辞書に記入し、失敗したらresult['failed']に記入し、修正に成功したらresult['changed']に記入します.
Actionplugin格納パス
カスタムpluginはansibleを構成する必要があります.cfg、ここにaction_を記入pluginsパラメータ.
このpluginの多重性が強くなく、本スキームのようにroleを定義して使用する場合は、roleの下にaction_を直接作成することをお勧めします.pluginsディレクトリは、実装されたばかりのaction pluginのpyファイルをこのディレクトリの下に置くことで、構成項目を減らすことができます.
roleでaction pluginとcopyを接着する
私もaction pluginの中でpythonでcopyからターゲットマシンまでの機能を実現することができて、繰り返しホイールを作る意味は大きくなくて、ansibleのroleは多種の要素を接着することができて、外で呼び出されて、呼び出し者はroleの実現の細部に関心を持つ必要はありません.
締めくくり
これは私の一回の试みで、みんなはどんな新しい考えが私に返事することができて、とてもみんなと一绪にansibleを学ぶことを望みます.
イニシアチブ
最初のアイデアは、ansibleコントローラでjarパケットの実行を完了し、jarパケットの実行結果をターゲットマシンにコピーするansible moduleを実現することです.いくつかのコード検証を書いた後、ansibleのmoduleがターゲットマシンで実行されていることがわかり、元のスキームは通用しません.ansibleの関連資料を読んだ後、以下の案を採用した.
action plugin
Action pluginは特殊なmoduleで、制御機で実行され、以下のようにテンプレートを実現し、処理ロジックに自分の処理コードを書くことができます.自分の処理結果に基づいてresult辞書に記入し、失敗したらresult['failed']に記入し、修正に成功したらresult['changed']に記入します.
from ansible.plugins.action import ActionBase
class ActionModule(ActionBase):
def run(self, tmp=None, task_vars=None):
# ActionBase run
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
#
source = self._task.args.get('src', None)
dest = self._task.args.get('dest', None)
#
if dest is not None:
result['failed'] = True
result['msg'] = "'dest' cannot be specified on a template"
#
#
result['changed'] = True
result['msg'] = "change success"
return result
Actionplugin格納パス
カスタムpluginはansibleを構成する必要があります.cfg、ここにaction_を記入pluginsパラメータ.
action_plugins = /myplugin/action_plugins
このpluginの多重性が強くなく、本スキームのようにroleを定義して使用する場合は、roleの下にaction_を直接作成することをお勧めします.pluginsディレクトリは、実装されたばかりのaction pluginのpyファイルをこのディレクトリの下に置くことで、構成項目を減らすことができます.
roleでaction pluginとcopyを接着する
私もaction pluginの中でpythonでcopyからターゲットマシンまでの機能を実現することができて、繰り返しホイールを作る意味は大きくなくて、ansibleのroleは多種の要素を接着することができて、外で呼び出されて、呼び出し者はroleの実現の細部に関心を持つ必要はありません.
---
- name: run my jar
action: myplugin src="/home/my.jar" dest="/home/result.txt"
- name: copy result file to target
copy:
src: "/home/result.txt"
dest: "/tmp/myjar/result.txt"
締めくくり
これは私の一回の试みで、みんなはどんな新しい考えが私に返事することができて、とてもみんなと一绪にansibleを学ぶことを望みます.