使用 Knife 命令上传 Chef Repo 和 Cookbook

举报
Tiamo_T 发表于 2022/10/20 14:21:05 2022/10/20
【摘要】 为 chef cookbook创建cookbooks和其他对象后,应将其上传到Chef 服务器。 您可以通过两种方式上传cookbooks:

 chef cookbook创建cookbooks和其他对象后,应将其上传到Chef 服务器。

您可以通过两种方式上传cookbooks

  1. 使用knife cookbook命令——这可以帮助你操作你的cookbooks
  2. 使用 knife upload 子命令 - 这可以帮助您上传所有chef 对象

本教程通过示例说明了如何使用这两个子命令(刀菜谱和刀上传)。

本教程涵盖以下内容:

  1. 上传单本cookbooks
  2. 上传所有cookbooks
  3. 冻结cookbooks版本(并强制上传)
  4. 上传包含所有依赖项的cookbooks
  5. 增加并发连接数
  6. 指定cookbooks目录位置
  7. 使用上传子命令上传​​cookbooks
  8. 上传所有cookbooks(使用上传子命令)
  9. 上传角色、节点和环境
  10. 上传整个Chef 回购(或)上传选择性项目
  11. 即使没有在本地更改也强制上传
  12. 执行试运行以验证将上传的内容
  13. 递归和并发选项
  14. Chef回购模式选项
  15. 从 Chef 服务器中删除 Cookbook

1.上传单本Cookbook

使用knife cookbook命令,您可以对您的cookbook执行各种操作,包括创建、删除、上传、锁定、查看等。

要上传单个说明书,请使用以下语法:

knife cookbook upload [cookbook-name]

使用knife cookbook 子命令,下面将上传一个cookbook 到Chef 服务器。下面将上传名为tiamo的cookbook

在上传cookbook之前,请确保您的工作目录是本地chef存储库目录。在这个例子中,它是 ~/chef-repo。以下上传 prod-db 食谱。

# cd ~/chef-repo

# knife cookbook upload prod-db
Uploading prod-db [1.0.0]
Uploaded 1 cookbook.

注意:当您上传cookbook时,只会上传 Chef 服务器中尚不存在的文件。所以,这是一种增量上传。

2.上传所有cookbook

如果要上传多本cookbook,请使用 -a 选项,如下所示。

以下将从当前目录上传本地chef工作站上的所有可用cookbook

以下命令会将您所有的本地cookbook上传到chef服务器。

# knife cookbook upload -a
Uploading prod-db        [1.0.0]
Uploading tiamo   [2.1.0]
Uploaded all cookbooks.

注意:如果您不想上传cookbook中的所有文件,您可以使用 chefignore 文件来排除某些文件类型。例如,您可以通过在 chefignore 文件中指定 .git 文件(或其他临时文件)来排除它们。

您也可以使用 –all 而不是 -a 选项。

knife cookbook upload --all

如果您在 chef-repo 目录之外执行上传命令,您将收到以下“无法从 /etc/chef/client.pem 加载您的私钥”错误消息。

# knife cookbook upload -a
WARNING: No knife configuration file found
WARN: Failed to read the private key /etc/chef/client.pem: #<Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/chef/client.pem>
ERROR: Your private key could not be loaded from /etc/chef/client.pem
Check your configuration file and ensure that your private key is readable

3. 冻结cookbook版本(并强制上传)

完成特定版本的cookbook的所有工作后,您可以执行以下命令,该命令将冻结该特定版本。

# knife cookbook upload prod-db --freeze
Uploading prod-db        [1.0.0]
Uploaded 1 cookbook.

在此示例中,1.0.0 版本的 prod-db cookbook被冻结。这意味着如果你想修改 prod-db,你应该创建一个新版本的cookbook,并上传新版本。

如果您尝试更新冻结的cookbook,您将收到以下错误消息:

# knife cookbook upload prod-db
Uploading prod-db        [1.0.0]
ERROR: Version 1.0.0 of cookbook prod-db is frozen. Use --force to override.
WARNING: Not updating version constraints for prod-db in the environment as the cookbook is frozen.
ERROR: Failed to upload 1 cookbook.

但是,出于某种原因,如果您想更新一个冷冻cookbook,请使用 –force 选项,如下所示。

# knife cookbook upload prod-db --force
Uploading prod-db        [1.0.0]
Uploaded 1 cookbook.

注意:在cookbook上传期间,如果您的本地计算机上有空目录,它们将不会上传到 Chef 服务器。如果要上传空目录,请在空目录中添加一些隐藏文件,例如 .empty。在这种情况下,从技术上讲,该目录不是空的,它将通过cookbook上传命令上传。

4. 上传包含所有依赖项的 Cookbook

当您上传单个说明书时,您还可以使用 -d 选项(或)--include-dependencies 自动上传所有依赖说明书,如下所示。

knife cookbook upload thegeekstuff -d

knife cookbook upload thegeekstuff --include-dependencies

5.增加并发连接数

默认情况下,knife 命令用于将cookbook上传到chef服务器的并发连接数是 10。这个默认值对于大多数情况来说已经足够了。但是,如果您有 100 多本大型cookbook,您可以通过增加并发值来加快上传过程,如下所示。

# knife cookbook upload -a --concurrency 20

6. 指定 Cookbook 目录位置

您还可以使用 -o 选项指定说明书的位置。在这里,您可以指定多个目录位置,如下所示。这将在指定目录中查找要上传的说明书。

# knife cookbook upload prod-db -o /root/chef-repo/cookbooks
Uploading prod-db      [1.1.0]
Uploaded 1 cookbook.

指定多个说明书目录时,用冒号分隔它们,如下所示。

# knife cookbook upload prod-db -o /root/chef-repo/cookbooks:/home/chef/cookbooks

您也可以使用 –cookbook-path,它与 -o 选项相同

# knife cookbook upload prod-db --cookbook-path /root/chef-repo/cookbooks

# knife cookbook upload prod-db --cookbook-path /root/chef-repo/cookbooks:/home/chef/cookbooks

二、Knife上传子命令

knife上传子命令用于上传所有cookbook对象,包括cookbook。例如,您可以使用它来上传说明书、角色、环境变量等。

7. 使用 Upload 子命令上传​​ Cookbook

要上传特定的说明书,请转到 chef-repo 目录,指定说明书名称以及说明书目录,如下所示。这会将 prod-db 食谱从本地机器上传到 Chef 服务器。

# knife upload cookbooks/prod-db
Updated cookbooks/prod-db

请注意,只有在本地cookbook中有任何更改时,才会上传。

8. 上传所有cookbook

首先,cd 到 chef 存储库目录,然后执行以下命令,这将从本地机器上传所有cookbook

# cd chef-repo

# knife upload cookbooks
Updated cookbooks/prod-db
Updated cookbooks/tiamo

您还可以从 Chef 存储库中的任何位置上传cookbook。为此,请在cookbook目录名称前指定 /,如下所示。

# knife upload /cookbooks
Updated cookbooks/prod-db
Updated cookbooks/tiamo

在上面的示例中,我们在 ~/chef-repo/nodes 目录中,并上传了所有cookbook

9. 上传角色、节点和环境

要上传角色 JSON 文件,请执行以下命令:

knife upload roles

要上传节点 JSON 文件,请执行以下命令:

# knife upload nodes
Created nodes/webserver.json

要上传环境,请执行以下操作:

knife upload environments

对于角色/节点/环境,就像说明书一样,您可以在目录前面指定 /,然后从本地chef存储库目录中的任何位置执行以下命令。

knife upload /roles

knife upload /nodes

knife upload /environments

此外,您可以通过指定 JSON 文件的名称为角色、节点或环境上传特定的 JSON 文件,如下所示。

knife upload roles/dba.json

knife upload nodes/webserver.json

knife upload environment/oracledb.json

10.上传整个chef回购(或)上传选择性项目

要将整个本地chef存储库上传到您的服务器,请 cd 到 chef-repo 目录并执行以下命令。

# knife upload . 
Updated nodes/webserver.json
Updated cookbooks/prod-db
Updated cookbooks/tiamo
Updated roles/dba.json

以下与上述命令相同,除了可以从本地厨师存储库目录中的任何位置执行。

knife upload /

或者,您有选择地上传少数对象类型。例如,以下将上传与给定模式匹配的说明书和节点。

# knife upload cookbooks/prod* nodes/web*
Updated nodes/webserver.json
Updated cookbooks/prod-db

11.即使没有在本地更改也强制上传

就像 cookbook 子命令一样,upload 子命令也支持冻结和强制选项,如下所示。

knife upload cookbooks/prod-db --freeze

一旦cookbook 被冻结,您可以再上传相同的版本,如下所示。

# knife upload cookbooks/prod-db
ERROR: cookbooks failed to write: Cookbook prod-db is frozen

一旦特定版本的cookbook被冻结,出于某种原因,如果您想在不创建新版本的情况下更新它,请使用 –force,如下所示。

# knife upload cookbooks/prod-db --force
Updated cookbooks/prod-db

注意:请注意,-force 命令不仅可以用于更新冻结的版本,还可以更新 Chef 服务器中的所有文件,即使该文件在本地没有更改。

例如,以下仅更新 prod-db,因为只有该特定cookbook在本地进行了更改。

# knife upload cookbooks
Updated cookbooks/prod-db

但是,当你给 -force 时,所有本地cookbook都会被上传,即使它们没有在本地更改。

# knife upload cookbooks --force
Updated cookbooks/prod-db
Updated cookbooks/tiamo

12. 执行试运行以验证将上传的内容

如果您真的想查看更改了哪些本地cookbook,那么试运行非常有帮助,这些菜谱将被上传到chef服务器。这样,您可以确保上传命令将上传您真正期望它上传的内容。

下面显示这将仅上传 prod-db 和 webserver 说明书。什么都没有真正上传。这只是一次试运行。

# knife upload cookbooks --force --dry-run
Would update cookbooks/prod-db
Would update cookbooks/webserver
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。