如何使用Ansible获取Linux主机序列号?内置facts是否无此功能?
关于Ansible获取Linux服务器序列号的问题
其实你完全不用自定义dmidecode模块啦!Ansible确实有内置的方式可以获取服务器序列号,只是可能你没找到对应的fact字段~
方式一:使用内置ansible_facts字段
Ansible的setup模块(也就是默认收集的facts)里其实包含了序列号相关的字段:ansible_product_serial。不过这个字段的可用性取决于你的系统是否能通过底层的dmidecode或者sysfs提供这个信息,而且需要以root权限运行(因为读取硬件信息通常需要root权限)。你可以直接用命令行测试:
ansible your_host -m setup -a 'filter=ansible_product_serial'在playbook里调用的话,直接用变量
{{ ansible_product_serial }}就可以了。方式二:直接调用dmidecode命令(无需自定义模块)
如果某些系统上ansible_product_serial没有返回值,你也可以用Ansible内置的command模块直接执行dmidecode命令,完全不用自己写模块:- name: 获取服务器序列号 command: dmidecode -s system-serial-number register: server_serial become: yes # 需要root权限执行dmidecode - name: 打印序列号 debug: msg: "服务器序列号:{{ server_serial.stdout }}"
至于为什么你会觉得Ansible没有内置这个fact,主要是因为硬件序列号这类信息不是所有环境都能提供——比如一些虚拟机、容器可能没有真实的硬件序列号,或者普通用户权限下无法读取,所以Ansible没有把它作为一个100%通用的fact,但确实提供了对应的字段和便捷的调用方式哦~
内容的提问来源于stack exchange,提问作者user3155618
相关产品推荐
相关产品推荐

