Linux
獲取目前主機名並使用 ansible 將其推送到 conf 文件中
我正在研究 ansible playbook 以獲取伺服器的目前主機名,然後將其設置到配置文件中。我無法弄清楚如何使用 lineinfile 模組推送 shell 輸出。
- name: Get hostname shell: echo $HOSTNAME register: result - name: Set hostname on conf file lineinfile: dest=/etc/teste/linux/zabbix_agentd.conf regexp="^Hostname=.*" insertafter="^# Hostname=" line=Hostname=????
通常,要查看變數內部的內容,您可以使用該
debug
模組。- debug: var: result
這應該向您顯示一個對象及其屬性,其中包括
stdout
. 這是上一個命令的完整結果。因此,要使用第一個任務的輸出,您將使用result.stdout
.要使用任何變數,您將使用 Jinja2 表達式:
{{ whatever }}
. 因此,您的任務可能如下所示:- name: Set hostname on conf file lineinfile: dest: /etc/teste/linux/zabbix_agentd.conf regexp: ^Hostname=.* insertafter: ^# Hostname= line: Hostname={{ result.stdout }}
理論講了這麼多,但真正的答案來了。不要那樣做。當然,Ansible 已經知道主機名。
清單中定義的主機名將是
{{ inventory_hostname }}
. 伺服器報告的主機名是{{ ansible_hostname }}
. 此外還有{{ ansible_fqdn }}
. 因此,只需使用其中任何一個而不是執行其他任務:- name: Set hostname on conf file lineinfile: dest: /etc/teste/linux/zabbix_agentd.conf regexp: ^Hostname=.* insertafter: ^# Hostname= line: Hostname={{ ansible_hostname }}