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

관련 정보