2015-09-08 128 views
0

我有Hiera与puppet/vagrant结合运行。傀儡清单脚本内的Hiera变量

说我有一个傀儡高管做以下

 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"我hiera

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

我如何去这样的common.yaml?语法是不明确的我,像这样的错误带来的:

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

回答

1

你必须在你的'hiera('project_db)'引号(即你没有括号前关闭,以便hiera('project_db')应该是正确的)

问题

通常我这样做这样的事情

$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], 
} 
+0

'命令之前宣布从hiera变量=> '的mysql -u根-e “CREATE DATABASE $ DB_NAME默认字符集= \ 'UTF8 \';”','这带来一个错误做'vagrant provision'...我认为'$ DB_NAME'仍然n提供某种引用或者不同的东西。 – Confidence

+1

我在exec中使用几乎相同,它运行良好。你可以在调试模式下运行puppet provisioning,并在exec块中添加debug(“”CREATE DATABASE $ DB_NAME“)以查看它打印的内容 –

+0

'==>默认:错误:mysql -u root -e”CREATE DATABASE $ dbName DEFAULT CHARACTER SET ='utf8';“返回1而不是[0] ==>默认值:错误:/ Stage [main]/Initenv/Exec [create-project-database]/returns:从notrun更改为0失败:mysql -u root -e“CREATE DATABASE $ dbName DEFAULT CHARACTER SET ='utf8';”返回1而不是[0]中的一个' – Confidence