Linux

獲取目前主機名並使用 ansible 將其推送到 conf 文件中

  • September 28, 2018

我正在研究 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 }}

引用自:https://serverfault.com/questions/760832