Переменные Hiera внутри сценария манифеста марионетки

У меня Hiera работает в сочетании с puppet/vagrant .

Скажем, у меня есть марионеточный исполнитель, который делает следующее

      exec { create-project-database:
    command => 'mysql -u root -e "CREATE DATABASE project_db DEFAULT CHARACTER SET = \'utf8\';"',
    unless  => 'mysql -u root information_schema -e "select * from information_schema.schemata;" | grep "project_db"',
    require => Package[mysql-server],
  }

Я хочу заменить строку "project_db" переменной, которая есть у меня внутри common.yaml hiera.

---
machine_message: 'This is the dev machine!'
codes_path: '/vagrant/code/laravel/'
project_db: 'project_db'

Как мне это сделать? Синтаксис мне не ясен, и что-то вроде этого выдает ошибки:

    command => 'mysql -u root -e "CREATE DATABASE 'hiera('project_db)' DEFAULT CHARACTER SET = \'utf8\';"',

person Confidence    schedule 08.09.2015    source источник


Ответы (1)


У вас есть проблема с вашими кавычками в 'hiera('project_db)' (т. е. вы не закрываетесь перед круглыми скобками, поэтому hiera('project_db') должно быть правильным)

обычно я объявляю переменные из hiera раньше, так что что-то вроде этого

$DB_NAME = hiera('project_db')
exec { create-project-database:
  command => "mysql -u root -e \"CREATE DATABASE $DB_NAME DEFAULT CHARACTER SET = 'utf8';\"",
  unless  => 'mysql -u root information_schema -e "select * from information_schema.schemata;" | grep "project_db"',
  require => Package[mysql-server],
}
person Frederic Henri    schedule 08.09.2015
comment
command => 'mysql -u root -e "CREATE DATABASE $DB_NAME DEFAULT CHARACTER SET = \'utf8\';"', это приводит к ошибке при выполнении vagrant provision... Я думаю, что $DB_NAME все еще нужны какие-то кавычки или что-то другое. - person Confidence; 08.09.2015
comment
Я использую практически то же самое в exec, и он работает нормально. можете ли вы запустить подготовку марионеток в режиме отладки и добавить отладку (CREATE DATABASE $DB_NAME) в блок exec, чтобы увидеть, что она печатает - person Frederic Henri; 08.09.2015
comment
переменная $dbName = hiera('project_db') - person Confidence; 08.09.2015
comment
ааа! мой плохой, интерполяция строк работает только с двойными кавычками (), поэтому редактирование команды для запуска command => "mysql -u root -e \"CREATE DATABASE $DB_NAME DEFAULT CHARACTER SET = 'utf8';\"" теперь должно быть в порядке - person Frederic Henri; 08.09.2015