Chef:在节点上的 knife bootstrap 期间升级 chef-client 版本

Chef: Upgrade chef-client version during knife boostrap on node

假设您通过 "knife bootstrap" 通过 Chef Workstation bootstrap 一个 Ubuntu 节点,并使用参数“-- 指定要在节点上安装的 Chef-client 版本bootstrap-版本”为“12.9.41”。

在 bootstrap 操作结束时检查节点上的 chef-client 版本,您将获得 knife 命令指定的版本:

[root@myhostname greg]# chef-client -v
Chef: 12.9.41

假设现在您要升级节点上的 chef-client 版本。例如,因为您 运行 列表中的一本新食谱需要更新版本才能使用。

如果您再次 运行 bootstrap 命令,在末尾指定“--bootstrap-version 12.10.24” chef-client 在节点上仍然是一样的:

[root@myhostname greg]# chef-client -v
Chef: 12.9.41

在 knife bootstrap 命令标准输出上你还得到:

34.210.102.44 [sudo] password for greg: -----> Existing Chef installation detected
34.210.102.44 Starting the first Chef Client run...
34.210.102.44 Starting Chef Client, version 12.9.41

即使在节点上安装了另一个 chef-client 版本,是否有办法告诉 knife 到在“--bootstrap-version” 上指定的 "force" 版本?

WORKAROUND

我找到了另一种方法,使用 knife bootstrap 命令上的“--bootstrap-install-command”参数并指定 bash 手动删除和安装目标版本的命令:

--bootstrap-install-command "sudo apt-get remove chef -y && curl -LO https://omnitruck.chef.io/install.sh && sudo bash ./install.sh -v 12.10.24 && rm install.sh"

执行后node上的chef-client版本是新的:

[root@myhostname greg]# chef-client -v
Chef: 12.10.24

关于我的测试用例场景的一些细节:

[ChefServer]
ChefServer version: 12.3.1
chef-client version: 12.5.1
berks version: 4.0.1 

[Workstation]
SO: Ubuntu 14.04
Workstation Knife version: 12.19.36

[Node]
SO: Ubuntu 14.04

不是真的,顾名思义 bootstrap 仅用于初始 bootstrap 而不是长期维护。有许多食谱可帮助在节点上升级 Chef 本身,但您必须检查哪些与这样的旧版本兼容。