web-dev-qa-db-ja.com

Ansibleでターゲットホストのユーザーにプロンプ​​トを表示する方法は?

ネットワーク設定を再構成するAnsibleの新しいマシン用のブートストラッププレイブックを作成したいと思います。最初の実行時に、ターゲットマシンにはDHCPが割り当てられたアドレスがあります。

プレイブックを実行することになっているユーザーは、新しいマシンに割り当てられたIPアドレスを知っています。ユーザーにisvalueを要求したいと思います。

vars_Promptモジュールを使用すると、ユーザーからの入力を取得できますが、hostsセクションで定義されているため、ホストアドレスが必要な値になるのを効果的に防ぎます。

インベントリファイルを変更するラッパースクリプトを使用せずに可能ですか?

9
techraf

これを行う正しい方法は、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"
20
nitzmahone

代わりに 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"
5
ydaetskcoR

複数のホストに対する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"
3
Jacob Evans

免責事項: 受け入れられた回答 は、問題に対する最善の解決策を提供します。これが機能している間、それはハックに基づいており、私はそれを参照として残します。

現在文書化されていない hackBruce 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"

1
techraf