Chef Solo 获取用户输入

3

我不知道为什么在互联网上找不到任何相关信息。

我想写一个配方,提示用户输入他们的Github用户名/密码,然后通过Github API发布SSH密钥。

我确定我可以使用普通的Ruby方法(例如gets)提示用户,但考虑到Chef提供的所有实用程序,这似乎并不自然。

有人能告诉我一种“Chef”方式来提示用户输入以存储变量供以后使用吗?

我想首先输出一些指示供用户阅读,然后获取用户名和密码,考虑到安全原因,密码不应该在控制台上显示。


你解决了这个问题吗?回答自己的问题没关系。请不要忘记将一个答案标记为正确! :) - sethvargo
这可能会回答你的问题:https://dev59.com/327Xa4cB1Zd3GeqPmSP_ - jkulak
2个回答

4
我认为 Chef 不适用于此类用户输入。
您可以使用在 Chef 运行的编译阶段执行的 Ruby 代码,但我建议以下操作:
环境变量 中读取它怎么样?

1
所以我猜这不是标准行为...我的问题是,我的厨师脚本本身是从自动化脚本中运行的,所以在那之前设置环境变量可能有点麻烦。 - brad

1

虽然感觉很不干净,但这确实起作用。也许可以进行调整,使其感觉更加干净:

file "/tmp/ans" do
  puts "输入有用的内容!"
  content ::STDIN.readline
end

你可以使用 chef-apply 应用此配方,但请注意,使用 Vagrant 不起作用。

尽管如此,我仍然建议以不同的方式处理。另一种方法是不直接调用 chef,而是通过包装脚本进行调用。这可以从用户读取数据并将其写入 json 文件,然后通过 -j PATH, --json-attributes PATH 参数(参见 chef-solo parameters)传递给 chef。


哦..或者那个脚本可以设置环境变量:D (但是使用-j参数会更简洁。) - StephenKing
1
有趣的想法...我会试一试并回复你,谢谢! - brad
如果您不得不问这个问题,那么您可能不应该使用这个答案。 如果您了解用户输入和ptys,并且可以编写自己的 expect(1),那么请随意使用。如果您还不能做到这一点,并且在使用此方法时遇到问题,并希望提交错误以寻求帮助,则我们可能会告诉您需要使用ENV变量和调用更适合用户输入的包装脚本,我们将无法教您如何修复ruby脚本中所有的错误。您将被困在泥潭中,我们将无法将您拉出来。 - lamont
你被卡在泥潭里七年了,才能回答这个问题吗?哈哈,开玩笑的 ;) - StephenKing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接