호스트 이름과 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
각 서버에 파일을 보관하세요.
다음 옵션을 제안할 수 있습니다.
결과를 인쇄하도록 스크립트를 변경하여 모든 출력을 실행
ansible
한 다음 해당 출력을 구문 분석할 수 있습니다.사용안정적인 획득스크립트를 실행한 후 모든 콘텐츠를 가져오는 모듈입니다
a.txt
. 예:ansible test -m fetch -a "src=a.txt dest=out/"
사용앤서블 설정호스트 이름과 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