在 knife ssh 时将 CLI 参数传递给 chef-client
Pass CLI arguments to chef-client while knife ssh
我正在尝试使用 Chef 自动部署应用程序。
我准备了通用的食谱(基于输入属性值工作)来部署 API。我已将所有属性保存在我的属性文件夹中。
这里面临的问题是,如果我在属性文件中保留包版本号,我就能够成功部署包。实际上,每次触发 CD 管道时,包号都会发生变化。并且我正在考虑使用 chef-client CLI 功能将参数作为 JSON 文件传递给 -j 选项。
问题是我不想在每次触发 CD 管道时触摸我的食谱来更新包版本,因为如果我更新我的食谱中的任何内容,我必须再次 运行 CI 用于食谱验证,同时我无法在每个节点(范围从 50 - 500 个服务器)中保留一个文件并在触发 chef-client 之前远程更新版本。
请帮助我找到一种方法将参数远程传递给 knife ssh。或解决此问题的任何其他解决方案。非常感谢您。
如果将包版本指定为属性,为什么不在 chef 环境中设置它?
https://docs.chef.io/environments.html
使用这种方法,您可以选择为应用程序的每个版本创建一个环境:
- myapp_v1
- myapp_v2
- myapp_v3
或者只是为管道过程中的每个阶段更新现有环境:
- 我的开发
- myint
- 我的测试
- myqa
关键是当你bootstrap新节点时你可以指定环境。环境将确保每个节点将具有相同的节点属性覆盖设置(您也可以更新现有节点的环境),
最后,使用环境的不明显好处是能够 "pin" 您正在使用的应用程序说明书的版本。在某个阶段,您将需要升级您的食谱,并且该更改也需要进行版本控制!
总而言之,这里有一个示例环境,它说明了原则:
{
"name": "mytest",
"cookbook_versions": {
"myappcookbook1": "= 1.0",
"myappcookbook2": "= 2.0"
},
"override_attributes": {
"myapp1": {
"version": "1.0"
},
"myapp2": {
"version": "2.0"
}
}
}
我正在尝试使用 Chef 自动部署应用程序。
我准备了通用的食谱(基于输入属性值工作)来部署 API。我已将所有属性保存在我的属性文件夹中。
这里面临的问题是,如果我在属性文件中保留包版本号,我就能够成功部署包。实际上,每次触发 CD 管道时,包号都会发生变化。并且我正在考虑使用 chef-client CLI 功能将参数作为 JSON 文件传递给 -j 选项。
问题是我不想在每次触发 CD 管道时触摸我的食谱来更新包版本,因为如果我更新我的食谱中的任何内容,我必须再次 运行 CI 用于食谱验证,同时我无法在每个节点(范围从 50 - 500 个服务器)中保留一个文件并在触发 chef-client 之前远程更新版本。
请帮助我找到一种方法将参数远程传递给 knife ssh。或解决此问题的任何其他解决方案。非常感谢您。
如果将包版本指定为属性,为什么不在 chef 环境中设置它?
https://docs.chef.io/environments.html
使用这种方法,您可以选择为应用程序的每个版本创建一个环境:
- myapp_v1
- myapp_v2
- myapp_v3
或者只是为管道过程中的每个阶段更新现有环境:
- 我的开发
- myint
- 我的测试
- myqa
关键是当你bootstrap新节点时你可以指定环境。环境将确保每个节点将具有相同的节点属性覆盖设置(您也可以更新现有节点的环境),
最后,使用环境的不明显好处是能够 "pin" 您正在使用的应用程序说明书的版本。在某个阶段,您将需要升级您的食谱,并且该更改也需要进行版本控制!
总而言之,这里有一个示例环境,它说明了原则:
{
"name": "mytest",
"cookbook_versions": {
"myappcookbook1": "= 1.0",
"myappcookbook2": "= 2.0"
},
"override_attributes": {
"myapp1": {
"version": "1.0"
},
"myapp2": {
"version": "2.0"
}
}
}