Команда SSHKit или задача Capistrano для фильтрации / замены токенов при загрузке - PullRequest
0 голосов
/ 19 декабря 2018

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

name: myservice-stg
identifier: myservice-stg-1.example.org:8675
baseURI: http://myservice-stg-1.example.org:8675

Кроме того, для данной среды нет никакой разницы между файлами конфигурации, поэтому я хотел бы иметь возможность просто определить шаблон (в примере используется Mustache, но может быть ERB или любой другой):

name: myservice-stg
identifier: {{fqhn}}:8675
baseURI: http://{{fqhn}}:8675

Моя текущая идея для взлома - просто использовать gsub и StringIO:

config_tmpl = File.open('/config/src/config.txt')
config_txt = config_tmpl.gsub('{{fqhn}}', host.hostname)
upload!(StringIO.new(config_txt), 'dest/config.txt')

Но, похоже, должно быть более стандартное, готовое решение.

1 Ответ

0 голосов
/ 20 декабря 2018

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

Предлагаемое вами решение выглядит довольно стандартным.Использование ERB (или другой системы шаблонов) не будет такой большой работой и обеспечивает гибкость / возможность повторного использования в будущем:

template_path = File.open('/config/src/config.txt.erb')
config_txt = ERB.new(File.new(template_path).read).result(binding)
upload! StringIO.new(config_txt), 'dest/config.txt', mode: 0644

ERB:

name: myservice-stg
identifier: <%= host.hostname %>:8675
baseURI: http://<%= host.hostname %>:8675
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...