amazon-web-services - 如何使用 Knife 编辑 ec2 节点的 Chef 属性

标签 amazon-web-services amazon-ec2 chef-infra knife

我想使用 knife node 编辑 ec2 节点的 node_data命令。
我可以使用以下命令手动执行此操作。knife node edit NODE_NAME它将生成一个我需要编辑的 json。

"name": "NODE-1",
  3   "chef_environment": "test",
  4   "normal": {
  5     "node_data": {
  6       "version": "23690ecc9c572e47db242bfad1296388f91da1e9",
  7       "depot_path": "https://s3.amazonaws.com/builds/",
  8       "source_repo": "softwares/"
  9     },
 10     "tags": [
 11 
 12     ]
 13   },
 14   "run_list": [
 15     "role[my-role]"
 16   ]
 17 }

我要编辑 node_data在那个json中。
如果我必须编辑 run_list 有一个命令knife node run_list add node 'role[ROLE_NAME]'我需要类似于这个命令的东西。

最佳答案

听起来您想要一种可编写脚本/非交互式的方式来设置给定节点的属性。您可以使用 knife exec为了这。

对于您给定的示例,假设您要获取和设置 source_repo 的值在 node_data对于“节点-1”。您可以通过运行来实现这一点:
knife exec -E "nodes.find(:name => 'NODE-1') { |node| node['node_data']['source_repo'] = '/new/path/softwares/'; node.save; }"
请注意 node.save最后:这将使厨师服务器保存您的更改。如果这在命令中丢失,那么它是一个临时更改,不会保存在厨师服务器上。

要确认该属性确实在厨师服务器上发生了变化,您可以像这样获取当前值:
knife exec -E "nodes.find(:name => 'NODE-1') { |node| puts node['node_data']['source_repo'] }"
你应该看到:/new/path/softwares/作为上述命令的输出。

顺便说一下,请注意 node['node_data']['source_repo']等效于(并且可以替换为)node.node_data.source_repo

关于amazon-web-services - 如何使用 Knife 编辑 ec2 节点的 Chef 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19021289/

相关文章:

amazon-web-services - 使用 CDK 添加 AWS Cognito 用户池角色

amazon-web-services - 是否可以有 "no-op"IAM 策略?

php - AWS EC2 实例上的 S3-php5-curl - 请求的域名与服务器的证书不匹配

linux - ec2 共享 www 文件夹

python-2.7 - 如何在 Python 中将文件从本地机器传输到 EC 实例?

chef-infra - Chef - ServerSpec - 访问节点属性

javascript - 如何为 Amazon S3 结合 JS/CSS?

amazon-web-services - Route 53 两个具有相同域覆盖的托管区域

vagrant - 在 ESXi 上的 VMWare 虚拟机上运行的 Virtualbox

linux - Chef 推荐的执行命令的方式