我真的希望我在这里错过了一些东西——因为我开始喜欢 Chef,但有些作品感觉非常愚蠢。
我有一个在特定凭据下运行的进程(服务)。这些凭据(用户/密码)是在安装服务时输入的,现在对人类不再可见。我想要那进程能够运行以下 knife 命令:
# Go kick the nodes and tell them to update now.
knife winrm "role:Xyz" "chef-client"
我不想把密码或用户名写下来。我希望它在我当前的上下文中运行,就像我在资源管理器中浏览 UNC 路径一样\\ABC\DEF
<-- Windows 足够“聪明”,知道我是谁并协商我的凭据。
另一个例子是当我的服务连接到 SQL Server 时。我可以选择不包含用户名/密码,而只是传递应用程序的凭据。
Chef 肯定不需要到处都硬编码管理员密码。请帮忙。
答案1
我找到了自己的答案。简短的回答是“否”,该knife
实用程序不支持此功能。但是,WinRM
做本机支持通过网络传输您的凭证的功能,而无需重新输入用户名/密码!
因此,我必须使用命令knife
来查询 Chef 以查找特定角色中的所有节点,但从那里,我进入powershell
并执行以下命令:
Invoke-Command -ComputerName TheComputerName -ScriptBlock { chef-client }
knife
并行执行这类事情,所以我只需要自己做就可以了powershell
。
答案2
我知道这个问题已经很老了,但实际上,knife-windows
安装 gem 后你确实可以用它knife winrm
来运行命令。
要安装knife-windows
gem,请运行:
gem install knife-windows
然后,要在所有具有该角色的机器上运行 Chef-Client,xyz
只需运行:
knife winrm 'role:xyz' 'chef-client' --winrm-user $AdminUser --winrm-password $AdminPassword
假设$AdminUser
和$AdminPassword
变量包含对目标机器的 WinRM 具有足够权限的值。
注意(如果使用 ChefDK):
根据您的设置,您可能需要使用:
chef gem install knife-windows
和
chef exec knife winrm 'role:xyz' 'chef-client' --winrm-user $AdminUser --winrm-password $AdminPassword
这取决于您使用的是嵌入式 Ruby 环境还是您自己的环境。