我的情况:
有Ansible:
playbook.yaml
文件)ansible-playbook master-playbook.yaml
之类的单个命令与厨师一起:
chef-client
时),我必须在集群中的每个节点上调用knife ssh <node-pattern> chef-client
问题:如何仅通过一条命令(例如ansible-playbook master-playbook.yaml
)使Chef对特定节点应用指令
注意:
Bash
脚本来调用knife-ssh
命令对我来说似乎是一种解决方法,我更喜欢使用Chef
这样的方式。更新:
ansible-playbook master-playbook.yaml
,而不是像knife ssh <node-pattern> chef-client
这样的特定命令。原因是我有大量的Chef项目,其中许多项目我可能要几个月才能接触完。当我想重新引导其中的一些时,我不记得每个节点的特定knife ssh <node-pattern> chef-client
命令。我只想记住所有项目的通用Chef命令(例如ansible-playbook master-playbook.yaml
-您可以将其应用于所有项目,并且它可以引导所有不同类型的节点)。答案 0 :(得分:1)
将搜索查询字符串与knife ssh
结合使用,请参见knife search
documentation中的最后一个示例:
要测试将在knife ssh子命令中使用的搜索查询:
$ knife search node "role:web NOT name:web03"
上例中的查询将搜索所有具有
web
角色的服务器,但不搜索名为web03
的服务器。搜索查询由两部分组成:
key
和search pattern
。其中key
是在Chef服务器上的可索引对象(角色,节点,客户端,环境或数据包)的JSON描述中找到的字段名称,而search_pattern
定义了将搜索的内容例如,使用以下搜索模式之一:精确,通配符,范围或模糊匹配。 key和search_pattern都区分大小写;键对使用星号(“ *”)的多字符通配符匹配的支持有限(只要它不是第一个字符)。
因此您可以在ssh刀中使用搜索查询字符串:
$ knife ssh "role:web NOT name:web03" "sudo chef-client" -a fqdn