ネットワーク設定を再構成するAnsibleの新しいマシン用のブートストラッププレイブックを作成したいと思います。最初の実行時に、ターゲットマシンにはDHCPが割り当てられたアドレスがあります。
プレイブックを実行することになっているユーザーは、新しいマシンに割り当てられたIPアドレスを知っています。ユーザーにisvalueを要求したいと思います。
vars_Prompt
モジュールを使用すると、ユーザーからの入力を取得できますが、hosts
セクションで定義されているため、ホストアドレスが必要な値になるのを効果的に防ぎます。
インベントリファイルを変更するラッパースクリプトを使用せずに可能ですか?
これを行う正しい方法は、add_Hostを使用して動的ホストを作成し、それを新しいグループに配置してから、そのグループを対象とする新しいプレイを開始することです。そうすれば、事前に設定する必要のある他の接続変数(資格情報/キーなど)がある場合は、それらをインベントリ内の空のグループに設定してから、ホストを動的に追加できます。例えば:
- hosts: localhost
gather_facts: no
vars_Prompt:
- name: target_Host
Prompt: please enter the target Host IP
private: no
tasks:
- add_Host:
name: "{{ target_Host }}"
groups: dynamically_created_hosts
- hosts: dynamically_created_hosts
tasks:
- debug: msg="do things on target Host here"
代わりに extra-vars
で渡すことができます。
hosts
セクションを{{ hosts_Prompt }}
などの変数にしてから、次のようにコマンドラインでホストを渡すだけです。
ansible-playbook -i inventory/environment playbook.yml --extra-vars "hosts_Prompt=192.168.1.10"
または、/etc/ansible/hosts
の- デフォルトのインベントリファイルの場所 を使用している場合は、次のように使用できます。
ansible-playbook playbook.yml --extra-vars "hosts_Prompt=192.168.1.10"
複数のホストに対するMattの回答に追加します。
入力例は192.0.2.10,192.0.2.11
- hosts: localhost
gather_facts: no
vars_Prompt:
- name: target_Host
Prompt: please enter the target Host IP
private: no
tasks:
- add_Host:
name: "{{ item }}"
groups: dynamically_created_hosts
with_items: "{{ target_Host.split(',') }}"
- hosts: dynamically_created_hosts
tasks:
- debug: msg="do things on target Host here"
免責事項: 受け入れられた回答 は、問題に対する最善の解決策を提供します。これが機能している間、それはハックに基づいており、私はそれを参照として残します。
現在文書化されていない hack ( Bruce P へのクレジット)を使用できることがわかりました-)-i
/--inventory
パラメーターの値をホストのアドホックリスト( reference )に変換する投稿を参照してください。ホスト名/ IPアドレスと末尾のスペース(以下のように)だけで、インベントリファイルが存在する必要のない単一のホストを参照します。
コマンド:
ansible-playbook -i "192.168.1.21," playbook.yml
したがって、playbook.yml
はすべてのホストに対して実行できます(上記の例では、単一のホスト192.168.1.21
に等しくなります)。
- hosts: all
リストには複数のIPアドレスが含まれる場合があります-i "192.168.1.21,192.168.1.22"