AnsibleをPythonで(ANSIBLE_Host)を介してインベントリファイルを指定せずに、次のように実行したいだけです。
ansible.run.Runner(
module_name='ping',
Host='www.google.com'
)
私は実際にファブリックでこれを簡単に行うことができますが、Pythonでこれを行う方法を疑問に思っています。一方、pythonのAnsible APIのドキュメントは完全ではありません。
驚くべきことに、トリックは,
を追加することです
# Host and IP address
ansible all -i example.com,
ansible all -i 93.184.216.119,
または
# Requires 'hosts: all' in your playbook
ansible-playbook -i example.com, playbook.yml
,
の前のHostパラメーターは、ホスト名またはIPv4/v6アドレスのいずれかです。
私はこの質問が本当に古いことを知っていますが、この小さなトリックはこれについて助けを必要とする将来のユーザーに役立つかもしれないと思います:
ansible-playbook -i 10.254.3.133, site.yml
ローカルホストで実行する場合:
ansible-playbook -i localhost, --connection=local site.yml
トリックは、IPアドレス/ DNS名の後に、引用符の中にコンマを入れて、 'hosts: all
'あなたのプレイブックに。
これが役立つことを願っています。
これを行うには:
hosts = ["webserver1","webserver2"]
webInventory = ansible.inventory.Inventory(hosts)
webPing = ansible.runner.Runner(
pattern='webserver*',
module_name='ping',
inventory = webInventory
).run()
ホストにあるものはすべてインベントリになり、パターンで検索できます(または「すべて」を実行できます)。
また、 Ansible Python API を駆動する必要があり、インベントリを保持するのではなく、引数としてホストを渡します。Ansibleの要件を回避するために一時ファイルを使用し、他の人に役立つかもしれません:
from tempfile import NamedTemporaryFile
from ansible.inventory import Inventory
from ansible.runner import Runner
def load_temporary_inventory(content):
tmpfile = NamedTemporaryFile()
try:
tmpfile.write(content)
tmpfile.seek(0)
inventory = Inventory(tmpfile.name)
finally:
tmpfile.close()
return inventory
def ping(hostname):
inventory = load_temporary_inventory(hostname)
runner = Runner(
module_name='ping',
inventory=inventory,
)
return runner.run()
私の場合、hosts: all
は、誰かがプレイブックを実行し、-i 10.254.3.133,
これが私の解決策でした(2.6に対応)。
$ ansible-playbook myplaybook.yml -e "{target: 10.1.1.1}" -i 10.1.1.1, ...
そして、プレイブックで:
- hosts: "{{ target }}"
remote_user: donn
vars_files:
- myvars
roles:
- myrole
これは、ホストをプロビジョニングする必要があり、それをインベントリに追加したくない/必要ない場合の特別なユースケースです。
これは完全な答えではありませんが、このトピックに関する議論は このディスカッションスレッド にあります。そのスレッドの最初の投稿の終わりに、ansible-playbookのラッパーbashスクリプトを作成する提案があります。これは、ちょっとしたハックですが実行可能です。
私が検討してきた他のことは、「ansible-pull」の使用と、ansible Inventoryプラグインの作成です。また、この質問に対する答えを見つけることに興味があります。詳細がわかり次第、この答えを更新していきます。
パターンを与える直接的な方法はないようです。これはそれを解決するための私のハックです。
echo fldn[3789:3799].mysite.com >test; ansible all -i test -m ping