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

获取当前主机名并使用 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=????

答案1

一般来说,要查看变量内部的内容,可以使用模块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 }}

答案2

你应该在命令行中传递变量

首先,注册变量

---
- hosts: 127.0.0.1
  connection: local
  vars:
  - person: John Snow
  - filename: v1.j2
  vars_files:
  - vars.yml
  tasks:
  - name: Who I am?
    action: command /usr/bin/whoami
    register: myname
  - name: Run jpprog.sh
    action: command ./jpprog.sh
    register: v

  - name: Populate template
    action: template src={{filename}} dest=/tmp/out


此剧本运行两个命令:第一个命令将其输出存储在名为 myname 的变量中,第二个命令存储在变量 v 中。whoami 的结果是一个字符串,以 variablename.stdout 的形式提供给模板。jpprog.sh 的结果是一个以字符串表示的 JSON 对象:

{
    "number": 18,
    "name": "john"
}

模板如下:

-> I am {{ myname.stdout }}

{% set t = v.stdout|from_json %}

JSON struct T: {{ t }}

name = {{ t.name }} 
number = {{ t['number'] }}

输出为:

-> I am jpm

JSON struct T: {u'number': 18, u'name': u'john'}

name = john 
number = 18

来源:Jan-Piet 男士网站

答案3

- name: Set hostname on conf file
  command: sed -i s/whatComesAfterHostname=/{{ ansible_hostname }}/g /etc/teste/linux/zabbix_agentd.conf

对我有用。

相关内容