如何使用 Playbook 将 inventory_hostname 记录到远程文件中?

如何使用 Playbook 将 inventory_hostname 记录到远程文件中?

我正在尝试将库存主机名写入远程文件以供稍后处理(最终是远程事实文件)。下面的主机有物理主机名,calvin.mydomain但控制器使用库存主机名(不同的 DNS)连接到它,calvin.test.mydomain所以我不能只使用-m setup仅从远程角度收集信息的事实变量(据我所知)。

我以为我可以通过将环境变量导出到远程,然后将其写入文件来实现这一点,但这只会产生文字inventory_hostname

我怎样才能在远程写入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

相关内容