厨师在本地机器上使用包装机



我是Chef/Packer的新手,如果这是一个新手问题,我很抱歉,基本上我是想让Packer使用我的本地机器来构建图像并执行shell脚本。以下是我的packer-build.json

{
"builders": [
{
"type": "file",
"name": "example",
"target": "./test_artifact.txt",
"content": "example content"
}
],
"provisioners": [
{
"type": "chef-solo",
"cookbook_paths": ["/Users/bakthak/code/nc_deployment/chef-repo/cookbooks"],
"staging_directory": "/Users/bakthak",
"execute_command": "sh /Users/bakthak/check.sh"
}
]
}

使用此文件运行构建生成输出

==> example: Provisioning with chef-solo
example: Installing Chef...
example: Creating directory: /Users/bakthak
example: Creating directory: /Users/bakthak/cookbooks-0
example: Creating configuration file 'solo.rb'
example: Creating JSON attribute file
example: Executing Chef: sh /Users/bakthak/check.sh
Build 'example' finished.

我对此有几个问题:

  1. packer是否正在使用我的本地机器安装chef并构建映像
  2. 外壳脚本sh /Users/bakthak/check.sh似乎没有执行,因为该脚本在打包器构建完成后不存在的目录中创建了一堆文件

感谢您的帮助:(

Packer将连接并运行";提供者";在CCD_ 2中识别或创建的机器/目标上。根据file构建器上的文件:

filePacker构建器并不是真正的构建器,它只是从文件中创建一个工件。它可以用于调试后处理器,而不会导致很长的等待时间。

因此,通过使用此生成器,您不会创建到任何位置的连接。然而,有一个名为null的构建器,可以用来建立SSH会话并运行provisioner。

考虑下面的示例,其中192.168.1.102是我的机器(运行packer的本地主机(的IP地址,并且具有可以通过SSH连接到它的凭据:

{
"builders": [
{
"type": "null",
"ssh_host": "192.168.1.102",
"ssh_username": "user1",
"ssh_password": "changeit"
}
],
"provisioners": [
{
"type": "chef-solo",
"cookbook_paths": ["/home/user1/.chef/cookbooks"],
"run_list": "my_cookbook",
"execute_command": "sh /home/user1/myscript.sh"
}
]
}

也就是说,对于chef-solo提供者来说,最好坚持默认的execute_command

chef-solo --no-color -c <ConfigPath> -j <.JsonPath>

并从Chef资源运行脚本:

my_cookbook/precipes/default.rb:

script 'myscript.sh' do
interpreter 'bash'
cwd '/home/user1/'
code <<-EOH
# Content of the script as
# some shell commands
EOH
end

相关内容

  • 没有找到相关文章

最新更新