Я работаю над доступным сценарием, чтобы получить текущее имя хоста сервера, а затем установить его в файл конфигурации. Я не могу понять, как я могу отправить вывод оболочки с помощью модуля lineinfile.
- 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 }}
Вам следует передавать переменные в командной строке.
Сначала зарегистрируйте переменную
---
- 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 Mens.
- name: Set hostname on conf file
command: sed -i s/whatComesAfterHostname=/{{ ansible_hostname }}/g /etc/teste/linux/zabbix_agentd.conf
работал у меня.