Ansible: リモートホスト名の取得

Ansible: リモートホスト名の取得

ホスト名とIPアドレスをファイルに入れるスクリプトを作成しました。私のスクリプトは次のとおりです。

echo "*********************************************">>a.txt;

hostname>>a.txt; 

/sbin/ifconfig>>a.txt

スクリプトはローカルでうまく実行されます。

私たちの環境には1000台のサーバーがあります。私の目標は、ローカルファイル(a.txtはansibleコマンドを実行するファイル)にあるすべてのサーバーのホスト名とIPアドレスを取得することです。このために私はansibleを使用します。

私は次のコマンドを実行しています:

$ ansible test -m script -a ankush.sh 

コマンドは実行中ですが、「a.txt」でローカルホスト名とローカルマシンのIPアドレスを確認できます。リモートシステムのホスト名とリモートIPアドレスが必要です。

答え1

ansibleすべてのスクリプトをリモートで実行して、a.txt各サーバーにファイルをアーカイブします。
次のオプションを提案できます。

  1. 結果を印刷するようにスクリプトを変更してすべての出力を実行ansibleし、その出力を解析できます。

  2. 使用安定した獲得スクリプトの実行後にすべてのコンテンツを取得するモジュールですa.txt。例:ansible test -m fetch -a "src=a.txt dest=out/"

  3. 使用アンサーブル設定ホスト名とIPアドレスを取得するモジュール(例:ansible test -m setup -a 'filter=ansible_hostname'および詳細)http://docs.ansible.com/ansible/setup_module.html

答え2

おそらく、スクリプトを書かずに、ansible設定モジュールを使用してansibleが収集した事実をフィルタリングする必要があるかもしれません。

以下を試してください

ansible test -m setup -a 'filter=ansible_all_ipv*_addresses' > ip_addrs.txt
ansible test -m setup -a 'filter=ansible_hostname' > hostnames.txt

これは本当に望むかもしれませんが、あまりにも多くのデータが出力される可能性があります。

ansible test -m setup - 'gather_subset=network'

答え3

次のファイルを生成yaml し、yamlファイルを実行してみてください。

- hosts: <Mention the inventory name>
  tasks:
  - name: use script module to execute local script on remote
    script: /ankush.sh 
    register: scriptoutput
  - name: local copy
    local_action: copy content="{{ scriptoutput.stdout }}" dest=/home/ankush.txt

コマンド出力が次にリダイレクトされるように、スクリプト内のコマンドのみを参照してください。ankush.txt

関連情報