플레이북을 사용하여 Inventory_hostname을 원격 파일에 어떻게 기록할 수 있습니까?

플레이북을 사용하여 Inventory_hostname을 원격 파일에 어떻게 기록할 수 있습니까?

나중에 처리하기 위해 원격 파일(결국 원격 팩트 파일)에 인벤토리 호스트 이름을 쓰려고 합니다. 아래 호스트에는 물리적 호스트 이름이 있지만 calvin.mydomain컨트롤러는 인벤토리 호스트 이름(다른 DNS)을 사용하여 호스트에 연결하므로 원격(AFAIK)의 관점에서만 정보를 수집하는 사실 변수를 calvin.test.mydomain사용할 수 없습니다 .-m setup

환경 변수를 원격으로 내보낸 다음 파일에 쓰면 이 작업을 수행할 수 있다고 생각했지만 문자 그대로의 단어만 생성됩니다.인벤토리_호스트 이름.

원격에서 파일에 hostvars[inventory_hostname]쓰거나 {{inventory_hostname}}파일에 어떻게 쓸 수 있나요 ?/etc/ansible/facts.d/

sudo ansible-playbook ./playbooks/hostname.yml -k -u root -i calvin.test.mydomain,
TASK [echo the LAN_HOSTNAME environment var] *******...
changed: [calvin.my.testing.dom]

이건 내 플레이북이야

---
- hosts: all
  tasks:
      - name: "echo the LAN hostname into a file on the remote"
        shell: "echo $LAN_HOSTNAME > /tmp/hostname.ans"
        environment:
            LAN_HOSTNAME: inventory_hostname

답변1

copy이것을 사용하는 데 필요합니다( @Michael Hampton이 제안한 대로 변경됨 ).

---
- hosts: all
  tasks:
   - name: "Create custom fact directory"
     file:
         path: "/etc/ansible/facts.d"
         state: "directory"

   - name: "Insert custom fact file"
     copy:
         content: "#!/bin/bash\necho {\\\"ansible_LAN_hostname\\\" : \\\"{{ inventory_hostname }}\\\"}"
         dest: /etc/ansible/facts.d/lan_hostname.fact
         owner: root
         group: sysadmin
         mode: 0775

관련 정보