2015-10-27 4 views
0

Я пытаюсь раздвинуть конфигурационные файлы для всех app_serverРаздвигая динамический конфигурационный файл с помощью анзибль

Вот мой файл инвентаризации

[app_servers] 
1.2.3.4 
5.6.7.8 

и мой файл конфигурации выглядит ниже

conf 
{ 
name : configuration file 
ip : a.b.c.d 
} 

Моя задача - нажать этот файл конфигурации, и значение IP должно быть заменено на Ip для этого сервера.

, например, в файле конфигурации 1.2.3.4 будет

conf 
{ 
name : configuration file 
ip : 1.2.3.4 
} 

и 5.6.7.8, это будет

conf 
{ 
name : configuration file 
ip : 5.6.7.8 
} 

Я попытался с помощью команды заменить и перебирать с помощью группы, как показано ниже , но для каждого сервера его цикл дважды, из-за которого не получается правильный IP-адрес.

- hosts: all 
    sudo: yes 
    tasks: 
    - replace: dest=/home/ubuntu/config regexp='a\.b\.c\.d' replace=' {{ hostvars[item]['inventory_hostname'] }}' 
     with_items: groups['app_servers'] 

Можно ли легко подойти к этому и иметь простые вещи, но динамические?

ответ

1

Если это всего лишь однострочное изменение существующего файла на удаленном хосте, вы можете использовать lineinfile.

Однако вы говорите, что файл конфигурации должен быть перенесен на удаленный хост, и в этом случае лучше использовать модуль template, записывая файл в шаблон Jinja2 и заполняя его переменными перед его нажатием.

Получите IP-адрес удаленного хоста от facts gathered by Ansible, например от ansible_default_ipv4.

Локально у вас есть config.j2:

{ 
    name: configuration file 
    ip: {{ ansible_default_ipv4.address }} 
} 

Задача, которая строит файл из шаблона:

- name: upload config file 
    template: 
    dest: /home/ubuntu/config 
    src: config.j2 

Например, результирующий файл /home/ubuntu/config на удаленном хосте с IP 192.168.10.10 будет:

{ 
    name: configuration file 
     ip: 192.168.10.10 
} 
Смежные вопросы