Использование sed с текстом команды подстановки в заменяющей части не работает - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть CFN с cfn-init для развертывания веб-сервера Apache с указанными виртуальными хостами.В шаблоне я использую конфигурационный набор AWS :: CloudFormation :: Init, чтобы заменить локальные IP-адреса частным IP-адресом экземпляра.

  config:
    packages:...
    files:...
    services:...
    commands:
      replacePrivateIP:
        cwd: "/etc/httpd/conf"
        command: !Sub |
          sed -i 's@127.0.0.1@$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)@g' httpd.conf

Команда sed отлично работает вне шаблона CFN.Но в процессе CFN-init он просто заменяет «127.0.0.1» на всю строку $ (curl -s http: //...).

Как правильно передать частный IP-адрес экземпляра в файл httpd.conf через cfn-init?

1 Ответ

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

Синтаксис подстановки команд $(..) работает , а не , работает, если заключен в одинарные кавычки, как и ожидалось в bash или в большинстве других оболочек, поскольку они сохраняют литеральное значение, присутствующее внутри.Чтобы ваша замена произошла, поместите ее в двойные кавычки как

sed -i 's@127.0.0.1@'"$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)"'@g' httpd.conf

Сравните выходные данные echo '$(date)' и echo "$(date)" для простого примера вашего случая.

...