2015-10-14 3 views
8

新しいマシン用のブートストラッププレイブックをAnsibleに書き込んで、ネットワーク設定を再構成したいと思っています。最初の実行時に、ターゲットマシンにはDHCP割り当てアドレスが割り当てられます。Ansibleでターゲットホストをユーザーに求める方法は?

プレイブックを実行するはずのユーザは、新しいマシンの割り当てられたIPアドレスを知っています。私は価値があることをユーザーに促したいと思います。

vars_promptモジュールは、ユーザーからの入力を許可しますが、hostsセクションの下で定義され、ホストアドレスを必要な値として効果的に防止します。

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

答えて

13

正しい方法は、add_hostとplで動的ホストを作成することですそれを新しいグループに追加し、そのグループを対象とする新しいプレイを開始します。そうすれば、事前に設定する必要のある他の接続バー(資格/キー/ etc)がある場合、それらをインベントリ内の空のグループに設定してから、ホストを動的に追加することができます。例:

- 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" 
4

代わりにextra-varsで渡すことができます。

単純な{{ hosts_prompt }}としてあなたhostsセクション変数を作成して、そのようなコマンドラインでホストを渡す:

ansible-playbook -i inventory/environment playbook.yml --extra-vars "hosts_prompt=192.168.1.10" 

それとも、あなたは、単に使用することができ/etc/ansible/hostsdefault inventory file location使用している場合:

ansible-playbook playbook.yml --extra-vars "hosts_prompt=192.168.1.10" 
+1

'インベントリ/ environment'部分は(playbook.yml''のように)一例に過ぎないであろう。インベントリファイルに '-i'を指定しないと、Anipalはデフォルトのインベントリファイル'/etc/ansible/hosts'をピックアップします。通常は 'extra- vars' – ydaetskcoR

+1

これは、 "extra-vars"を渡す方法の例であり、 "ここに入力する必要がある正確な行はありません"ではありません。また、インベントリは必要な引数であり、デフォルトでは '/ etc/ansible/hosts'になります。存在しない場合は失敗します。 – ydaetskcoR

+1

@techraf:あなたの提案された編集がレビューキューで拒否されました。 ydaetskcoRはそれとは関係ありません。そのような編集は単にSOで受け入れられません。この回答は現在あなたのために答えを提供しているので、将来の訪問者のために本当にそれを受け入れるべきです。 – Cerbrus

1

免責事項:The accepted answerは、この問題に対する最良の解決方法を提供します。これが動作している間、それはハックに基づいており、私は参照としてそれを残します。

私はホストのアドホックリスト(reference)に-i/--inventoryパラメータの値を向くことは(ポストに私を指しているためBruce Pにクレジット)は、現在、文書化されていないhackを使用可能であったが分かりました。ホスト名/ IPアドレスと後続のスペースだけでは(以下のように)、インベントリファイルを必要とせずに単一のホストを参照します。

コマンド:

ansible-playbook -i "192.168.1.21," playbook.yml 

し、それに応じてplaybook.ymlは、(上記の例では、単一のホスト192.168.1.21と同じになります)、すべてのホストに対して実行することができます:

- hosts: all 

リストに複数が含まれる場合があります1つのIPアドレスより-i "192.168.1.21,192.168.1.22"

+2

私は誰かが間違ってパラメータを使わずにプレイブックを実行すると**地獄が緩んでしまうので、このアプローチが嫌いです**。 – sorin

1

複数のホストの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" 
関連する問題