2

我正在使用 vagrant + chef-solo + barkshelf 插件。在我的 Vagrantfile 中,我有这个:

chef.json = {
  "postgresql" => {
    "password" => {
      "postgres" => "password"
    }
  },
  "database" => {
    "create" => ["chembl_18"]
  },
  "build_essential" => {
    "compiletime" => true
  }
}

如果我在这里添加更多配置,我的 Vagrantile 很快就会变得凌乱。我试图改变这一点,所以我创建了databags/postgresql/json_attribs.json包含以下内容的文件:

{
  "postgresql": {
    "password": {
      "postgres": "iloverandompasswordsbutthiswilldo"
    }
  }
}

并修改了我的 Vagrantfile 中的内容:

chef.json = {
  :postgresql => ["json_attribs"],
  "database" => {
    "create" => ["chembl_18"]
  },
...
}

但它不起作用,我得到:

==> default:  58>>   default['postgresql']['dir'] = "/etc/postgresql/#{node['postgresql']['version']}/main"
...
==> default: [2014-05-14T12:36:51+00:00] ERROR: Running exception handlers
==> default: [2014-05-14T12:36:51+00:00] ERROR: Exception handlers complete
==> default: [2014-05-14T12:36:51+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: [2014-05-14T12:36:51+00:00] FATAL: TypeError: can't convert String into Integer

那么我应该如何以及在哪里放置这些设置以便将它们分成几个单独的文件?

4

1 回答 1

5

不,您不能在不更改配方代码的情况下将其移动到数据包中。

属性(您通过 vagrant 配置提供)与数据包不同,后者也存储 JSON 数据。数据包中的数据只是在 Chef Server 中“闲置”,直到您在说明书中明确阅读。

search()可以通过和函数从数据包中读取数据data_bag(),请参阅文档data_bag_item()

为避免使您的. 杂乱无章Vagrantfile,您应该使用角色包装说明书

于 2014-05-14T13:57:14.593 回答