2

我正在使用 Chef 版本 11.16.4 和 packer v 0.7.1 和 docker v1.3.0

在安装 chef-solo 后,我无法让 chef-solo 运行 chef-solo 供应器。

我收到以下错误:

错误:无法确定节点名称:配置 node_name 或配置系统的主机名和 fqdn

我在互联网上四处寻找,试图弄清楚发生了什么,这个错误似乎很少见,因为 node_name 通常由系统赋予默认值,或者在 solo.rb 中分配,在我看来,这似乎不能直接在打包程序中覆盖配置模板。

我的打包程序配置有问题还是这是 chef-solo 和 docker 配置之间的不兼容问题?

我正在使用以下打包程序配置:

{
    "variables": {
         "version": "",
         "base-image-version": ""
    },
    "builders":[{
         "type": "docker",
         "image": "centos:latest",
         "pull": true,
         "export_path": "zookeeper-base-{{user `version`}}.tar"
    }],
    "provisioners":[
         {
         "type": "chef-solo",
         "cookbook_paths": ["../chef-simple/cookbooks"],
         "install_command":"curl -L https://www.opscode.com/chef/install.sh | bash",
         "execute_command":"chef-solo --no-color -c {{.ConfigPath}} -j {{.JsonPath}}",
         "run_list":["recipe[zookeeper::install]"],
         "json":{"node_name":"zookeeper-box","env_name":"dev","ip":"10.10.10.10"},
         "prevent_sudo":true
    }],
    "post-processors": [{
         "type": "docker-import",
         "repository": "ed-sullivan/zookeeper-base",
         "tag": "{{user `version`}}"
    }]
}
4

2 回答 2

3

我通过execute_command在 json 文件中添加一个 Docker 主机名来解决这个问题。

"run_command": ["-d", "--hostname=foobar", "-i", "-t", "{{.Image}}", "/bin/bash"]

我还必须安装主机名包(我认为厨师使用它来查找主机名)和 curl 包。

"inline": ["yum -y update; yum -y install curl; yum -y install hostname"]

希望这会有所帮助!

于 2014-11-05T21:27:40.373 回答
1

我最终通过创建一个定义 node_name 的配置模板并使用文件配置器安装厨师文件来解决这个问题。

这是更新的配置

{
    "variables": {
         "version": "0.1",
         "base-image-version": "",
         "chef_dir"          : "/tmp/packer-chef-client",
         "chef_env"          : "dev"
     },
     "builders":[{
         "type": "docker",
         "image": "centos:latest",
         "pull": true,
         "export_path": "zookeeper-base-{{user `version`}}.tar"
     }],
     "provisioners":[
         { "type": "shell", "inline": [ "mkdir -p {{user `chef_dir`}}", "yum install -y tar" ] },
         { "type": "file",  "source": "../chef/cookbooks",       "destination": "{{user `chef_dir`}}" },
         {
         "type": "chef-solo",
         "install_command":"curl -L https://www.opscode.com/chef/install.sh | bash",
         "execute_command":"chef-solo --no-color -c {{.ConfigPath}} -j {{.JsonPath}}",
         "run_list":["recipe[zookeeper::install]"],
         "prevent_sudo":true,
         "config_template":"./solo.rb.template"
     }],

}

以及对应的配置模板文件

log_level   :info
log_location    STDOUT
local_mode  true
ssl_verify_mode verify_peer
role_path         "{{user `chef_dir`}}/roles"
data_bag_path     "{{user `chef_dir`}}/data_bags"
environment_path  "{{user `chef_dir`}}/environments"
cookbook_path     [ "{{user `chef_dir`}}/cookbooks" ]
node_name         "packer-docker-build"
于 2014-11-06T21:57:13.203 回答