марионетка объединить две переменные в определении

У нас есть несколько субинтерфейсов и несколько приложений, работающих на собственном IP-адресе субинтерфейса, поэтому я пытаюсь использовать переменные facter для повторения моего цикла с использованием $name

вот мой интерфейс в выводе команды facter

ipaddress_eth0_0 => 10.3.68.98
ipaddress_eth0_1 => 10.3.68.99
ipaddress_eth0_2 => 10.3.68.100
ipaddress_eth0_3 => 10.3.68.101

мой файл манифеста

define myapp {
     exec {"$name":
        command => /bin/sed -i 's/IP_ADDRESS=\"127.0.0.1\"/IP_ADDRESS=\"$ipaddress_eth0_$name\"/' /opt/app.$name/bin/setenv.sh
}

myapp { [ "0", "1" , "2", "3" ]: }

почему-то $ipaddress_eth0_$name не работает :( не анализирует эту переменную, как мне соединить две переменные?


person Satish    schedule 28.01.2014    source источник


Ответы (3)


Взгляните на функцию встроенного шаблона

   define myapp {
      $myip  =  inline_template("<%= ipaddress_eth0_${name} %>")
      exec {"$name":
        command => "/bin/sed -i 's/IP_ADDRESS=\"127.0.0.1\"/IP_ADDRESS=\"$myip\"/' /opt/app.${name}/bin/setenv.sh"
   }
person Raul Andres    schedule 29.01.2014

Библиотека stdlib имеет getvar (https://github.com/puppetlabs/puppetlabs-stdlib#getvar), которая должна решить вашу проблему.

person bartavelle    schedule 31.01.2014

Не могли бы вы попробовать обернуть переменные фигурными скобками

E.g.

   define myapp {
      exec {"$name":
        command => /bin/sed -i 's/IP_ADDRESS=\"127.0.0.1\"/IP_ADDRESS=\"${ipaddress_eth0}_${name}\"/' /opt/app.${name}/bin/setenv.sh
   }

ОБНОВЛЕНИЕ

Не могли бы вы заключить команду в двойные кавычки, например.

   define myapp {
      exec {"$name":
        command => "/bin/sed -i 's/IP_ADDRESS=\"127.0.0.1\"/IP_ADDRESS=\"${ipaddress_eth0}_${name}\"/' /opt/app.${name}/bin/setenv.sh"
   }
person cocheese    schedule 28.01.2014
comment
Нет, это не работает, я пробовал все возможные комбинации, но это не работает. Выглядит просто, но не работает... - person Satish; 29.01.2014
comment
Можете ли вы показать мне ваш факт? Это пользовательский или основной факт? - person cocheese; 29.01.2014
comment
Это кукольный фактор, а не заказной, проверьте мой вопрос, я их разместил - person Satish; 29.01.2014
comment
Я вижу, у вас была возможность заключить команду в двойные кавычки? - person cocheese; 29.01.2014
comment
Я перепробовал все цитаты, single double () все возможные комбинации, поверьте мне, последние три дня я делаю все это - person Satish; 29.01.2014
comment
Не могли бы вы предоставить Vagrantfile и файл puppet? Так что я могу вести их сам. Потому что я не получаю ошибку при попытке воспроизвести ее - person cocheese; 29.01.2014
comment
Спасибо за попытку, но я получил ответ, это было inline_template - person Satish; 29.01.2014