【问题标题】:Hiera variables inside a puppet manifest script木偶清单脚本中的 Hiera 变量
【发布时间】:2015-09-08 07:25:19
【问题描述】:

我让 Hiera 与 puppet/vagrant 一起运行。

假设我有一个 puppet 执行官正在关注

      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],
  }

我想用我在 hiera 的 common.yaml 中的变量替换字符串 "project_db"

---
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\';"',

【问题讨论】:

    标签: vagrant puppet provisioning hiera


    【解决方案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],
    }
    

    【讨论】:

    • command => 'mysql -u root -e "CREATE DATABASE $DB_NAME DEFAULT CHARACTER SET = \'utf8\';"', 这会带来一个错误 vagrant provision...我认为 $DB_NAME 仍然需要某种引号或其他东西。
    • 我在 exec 中使用的几乎相同,并且运行良好。您可以在调试模式下运行 puppet 配置并在 exec 块中添加 debug(""CREATE DATABASE $DB_NAME") 以查看它打印的内容
    • ==> default: Error: mysql -u root -e "CREATE DATABASE $dbName DEFAULT CHARACTER SET = 'utf8';" returned 1 instead of one of [0] ==> default: Error: /Stage[main]/Initenv/Exec[create-project-database]/returns: change from notrun to 0 failed: mysql -u root -e "CREATE DATABASE $dbName DEFAULT CHARACTER SET = 'utf8';" returned 1 instead of one of [0]
    • 变量是$dbName = hiera('project_db')
    • 啊!我不好,字符串插值仅适用于双引号 ("),因此编辑命令以运行 command => "mysql -u root -e \"CREATE DATABASE $DB_NAME DEFAULT CHARACTER SET = 'utf8';\"" 现在应该可以了
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多