2016-12-20 18 views
0

Я работаю над запуском контейнеров Consul на докере с Marathon, и я столкнулся с несколько субъективной проблемой создания файлов JSON.Generating -bind параметр в файлах Consul JSON для использования с Marathon

В настоящее время я планирую запустить контейнеры с JSON файлами этого формата

сервер 1.json

{ 
     "id": "consul-server-2", 
     "cmd": "consul agent -server -client=0.0.0.0 -ui -bind=100.10.30.40 -retry-join=server-1.local -data-dir=/tmp/consul", 
     "cpus": 1, 
     "mem": 512.0, 
     "instances": 1, 
     "container": { 
     "type": "DOCKER", 
     "docker": { 
      "image": "consul:latest", 
      "name": "dev-consul", 
      "network": "HOST" 
     } 
     }, 
     "constraints": [ 
     [ 
      "hostname", 
      "CLUSTER", 
      "server-1.local" 
     ] 
     ] 
} 

мне нужно, чтобы быть в состоянии изменить -bind адреса для каждого файла JSON и Я планировал использовать heredocs с BASH, но я не уверен, есть ли более эффективные методы в отношении удобства обслуживания для создания файлов такого типа.

В идеале я хотел бы иметь поле в консуле или марафоне, которое могло бы автоматически дать мне IP-адрес определенного порта для подачи на -bind, но поскольку у меня есть несколько частных IP-адресов, мне кажется, что мне нужно настроить его вручную.

ответ

0

Похоже, что у вас проблема с управлением конфигурацией. Если вы правильно поняли, что у вас есть несколько серверов во внутренней сети, где каждый имеет внутренний IP-адрес, и теперь вы хотите генерировать правильные служебные файлы для каждого сервера.

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

Лично я могу порекомендовать Ansible, так как с этим легко начать и с низкими накладными расходами.

Чтобы решить вашу проблему, сначала создайте файл инвентаря с IP-адресами своих серверов, а затем создайте шаблон Jinja2 для своих служебных файлов. Затем вы можете использовать правильный IP-адрес для каждого сервера в этом шаблоне и, наконец, развернуть все файлы с помощью Ansible.

0

Посмотрите на consul 0.7.2 или новее. В Consul появилась документальная функция, которая позволяет конфигурировать IP-адреса во время выполнения. Я бы не рекомендовал не работает консулом в контейнере, если работает net=host, но с использованием фрагмента кода конфигурации выше:

{ 
      "id": "consul-server-2", 
      "cmd": "consul agent -server -client='{{ GetPrivateIP }}' -ui -bind=100.10.30.40 -retry-join=server-1.local -data-dir=/tmp/consul", 
      "cpus": 1, 
      "mem": 512.0, 
      "instances": 1, 
      "container": { 
      "type": "DOCKER", 
      "docker": { 
       "image": "consul:latest", 
       "name": "dev-consul", 
       "network": "HOST" 
      } 
      }, 
      "constraints": [ 
      [ 
       "hostname", 
       "CLUSTER", 
       "server-1.local" 
      ] 
      ] 
     } 

Другие варианты для того, что адрес для использования могут быть изучены на основе hashicorp/go-sockaddr пакета.