首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取当前主机名并使用ansible将其推入conf文件

获取当前主机名并使用ansible将其推入conf文件
EN

Server Fault用户
提问于 2016-03-01 21:13:19
回答 3查看 70.5K关注 0票数 6

我正在编写一个ansible剧本,以获取服务器的当前主机名,然后将其设置为一个配置文件。我想不出如何使用lineinfile模块来推动shell输出。

代码语言:javascript
运行
复制
  - 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=????
EN

回答 3

Server Fault用户

回答已采纳

发布于 2016-03-02 03:16:27

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

代码语言:javascript
运行
复制
- debug:
    var: result

这将显示一个对象及其属性,其中包括stdout。这是前面命令的完整结果。因此,要使用第一个任务的输出,可以使用result.stdout

若要使用任何变量,请使用Jinja2表达式:{{ whatever }}。所以你的任务可能是这样的:

代码语言:javascript
运行
复制
- 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 }}。因此,只需使用其中任何一个,而不是运行一个额外的任务:

代码语言:javascript
运行
复制
- name: Set hostname on conf file
  lineinfile:
    dest: /etc/teste/linux/zabbix_agentd.conf
    regexp: ^Hostname=.*
    insertafter: ^# Hostname=
    line: Hostname={{ ansible_hostname }}
票数 23
EN

Server Fault用户

发布于 2016-03-01 21:51:08

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

首先,注册变量

代码语言:javascript
运行
复制
---
- 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对象,表示为字符串:

代码语言:javascript
运行
复制
{
    "number": 18,
    "name": "john"
}

模板如下:

代码语言:javascript
运行
复制
-> I am {{ myname.stdout }}

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

JSON struct T: {{ t }}

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

产出如下:

代码语言:javascript
运行
复制
-> I am jpm

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

name = john 
number = 18

资料来源:网站.

票数 1
EN

Server Fault用户

发布于 2018-09-27 20:23:56

代码语言:javascript
运行
复制
- name: Set hostname on conf file
  command: sed -i s/whatComesAfterHostname=/{{ ansible_hostname }}/g /etc/teste/linux/zabbix_agentd.conf

为我工作过。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/760832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档