获取当前主机名并使用 ansible 将其推送到 conf 文件中

ped*_*xto 5 linux ansible yaml

我正在编写 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=????
Run Code Online (Sandbox Code Playgroud)

udo*_*dan 21

通常,要查看变量内部的内容,您可以使用debug模块。

- debug:
    var: result
Run Code Online (Sandbox Code Playgroud)

这应该向您显示一个对象及其属性,其中包括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 }}
Run Code Online (Sandbox Code Playgroud)

理论到此为止但真正的答案来了。不要那样做。当然 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 }}
Run Code Online (Sandbox Code Playgroud)