从 ruby​​ 内部加密数据包,无需依赖 Knife

2023-11-29

目前要加密数据包,我必须这样做:system "knife data bag from file TemporaryEncrypting \"#{enc_file_path}\" --secret-file #{Secret_Key_Path}"

这不起作用,因为 Knife 找不到配置文件,而且我似乎无法让它读取其中的配置文件C:\chef.

我如何从 ruby​​ 中执行此操作?


我弄清楚了如何在 ruby​​ 内部加密,只需使用以下代码:

require 'chef/knife'
#require 'chef/encrypted_data_bag_item' #you need to do this in chef version 12, they've moved it out of knife and into it's own section
require 'json'

secret = Chef::EncryptedDataBagItem.load_secret Secret_Key_Path

to_encrypt = JSON.parse(json_to_encrypt)

encrypted_data = Chef::EncryptedDataBagItem.encrypt_data_bag_item to_encrypt, secret

通过此信息获得答案answer,这是有问题的代码:

namespace 'databag' do
  desc 'Edit encrypted databag item.'
  task :edit, [:databag, :item, :secret_file] do |t, args|
    args.with_defaults :secret_file => "#{ENV['HOME']}/.chef/encrypted_data_bag_secret"
    secret = Chef::EncryptedDataBagItem.load_secret args.secret_file
    item_file = "data_bags/#{args.databag}/#{args.item}.json"
    tmp_item_file = "/tmp/#{args.databag}_#{args.item}.json"
    begin
      #decrypt data bag into tmp file
      raw_hash = Chef::JSONCompat.from_json IO.read item_file
      databag_item = Chef::EncryptedDataBagItem.new raw_hash, secret
      IO.write tmp_item_file, Chef::JSONCompat.to_json_pretty( databag_item.to_hash )
      #edit tmp file
      sh "#{ENV['EDITOR']} #{tmp_item_file}"
      #encrypt tmp file data bag into original file
      raw_hash = Chef::JSONCompat.from_json IO.read tmp_item_file
      databag_item = Chef::EncryptedDataBagItem.encrypt_data_bag_item raw_hash, secret
      IO.write item_file, Chef::JSONCompat.to_json_pretty( databag_item )
    ensure
      ::File.delete tmp_item_file #ensure tmp file deleted.
    end
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 ruby​​ 内部加密数据包,无需依赖 Knife 的相关文章

随机推荐

  • 使用 PyMongo 连接数组因未知组运算符“$concatArrays”而失败

    我有 mongodb 数据 例如 word good info tbl id d1 term freq 2 tbl id d2 term freq 56 tbl id d3 term freq 3 word spark info tbl i
  • 将 C++ 二维固定长度 char 数组编组为结构成员

    我正在尝试调用一个非托管 C 函数 该函数具有一个结构作为输入参数 该结构在头文件中定义如下 struct MyStruct int siOrder char aaszNames 6 25 int siId 6 int siTones 6
  • 需要有关本地 CF9/Jrun 安装上的多个 URL 设置的帮助

    我正在本地 Windows XP 计算机上运行 ColdFusion 9 Developer 版本 我已经将它与嵌入式 Web 服务器一起安装 我认为它是 JRun 现在 我只能访问 127 0 0 1 8500 其他位置的网页 我的所有应
  • pandas.replace 与 str.replace 正则表达式冲突。代码顺序

    我的任务是删除括号中的所有内容并删除国家 地区名称后面的所有数字 更改几个国家的名称 例如 玻利维亚 多民族国 应为 玻利维亚 Switzerland17 应该是 瑞士 我原来的代码是这样的 dict1 Republic of Korea
  • 使用 FFMPEG 通过 QuickTime 对可读的电影进行编码

    我正在尝试使用以下命令对图像序列进行编码 ffmpeg exe i d png f mp4 vcodec h264 test mp4 但是 QuickTime 无法打开该文件 或者有时会播放黑色电影 而该电影在 VLC 播放器中播放效果很好
  • 类继承:从继承类的属性重新创建基类项(或实例)

    I have a class A that is inherited from B A 作为我想从 B 修改的一些只读属性 用 new 隐藏这些属性不是一个合适的选择 因为基类有一些使用其自己的属性的函数 不能使用 override 关键字
  • CoffeeScript 模块的模式[重复]

    这个问题在这里已经有答案了 在审查的同时Github 上的 CoffeeScript 源代码 我注意到大多数 如果不是全部 模块定义如下 function call this 这种模式看起来像是将整个模块包装在一个匿名函数中并调用自身 这种
  • 为什么 C++ 中 const 方法不覆盖非常量方法?

    考虑这个简单的程序 class Shape public virtual double getArea 0 class Rectangle public Shape int width int height public Rectangle
  • 是否可以更改 Hive 分区表上列的元数据?

    这是我之前提出的问题的延伸 是否可以更改 HIVE 中的分区元数据 我们正在探索更改表上的元数据的想法 而不是对 SELECT 语句中的数据执行 CAST 操作 更改 MySQL 元存储中的元数据非常简单 但是 是否可以将该元数据更改应用于
  • 注册我的广播接收器以在应用程序启动时运行?

    我想在启动应用程序时运行一些代码 因此当用户打开任何应用程序时必须通知我的广播接收器 有什么办法可以做到吗 不 抱歉 应用程序启动时或活动启动时都不会广播 Intent
  • 从 C# 调用 PHP Web 服务

    我目前正在尝试用 C 调用 PHP Web 服务 我一直在尝试在互联网上找到的数十种解决方案 但没有运气 并且没有一个与我有相同的问题 我对PHP不熟悉 我可以从我的 C 成功调用authenticate get string auth i
  • 如何注入EPartService

    我正在开发 e4 应用程序 我想在 Part 和 Handler 之外注入 EPartService 当我注入 EPartService 时 我会得到空指针错误 public class DisplayRuntimePart Inject
  • 更改 Java 中的当前工作目录?

    如何从 Java 程序中更改当前工作目录 我能找到的有关该问题的所有内容都表明您根本无法做到这一点 但我不敢相信事实确实如此 我有一段代码 它使用硬编码的相对文件路径从通常启动的目录中打开一个文件 我只是希望能够在不同的 Java 程序中使
  • 如何解开双可选?

    如何解开返回的字符串 可选 可选 蓝色 var cityName String if let cityAnno annotation as MGLAnnotation cityName String stringInterpolationS
  • 标头是什么?

    什么是
  • 从 LibreOffice Basic 调用 C 共享库函数

    我试图从 LibreOffice Basic 调用 C 共享库函数 但当它到达 Declare 行时 我总是收到 基本运行时错误 未实现 这只是为了一件有趣的事情 但无法做到这一点让我很烦恼 Declare 语句如下所示 Declare F
  • Erlang 及其堆内存消耗

    我一直在 HP Proliant 服务器上运行高度并发的应用程序 该应用程序是我用 erlang 编写的文件系统索引器 它为在文件系统上找到的每个文件夹生成一个进程 并将所有文件路径记录在碎片化的 Mnesia 数据库中 数据库由disc
  • CSS 填充剩余容器宽度

    我有这个标题栏 我需要名为 middle 的元素来填充 div 中剩余的空白 我该怎么做 header background red middle background orange display inline block right b
  • 通过 App Delegate 在视图之间共享数据

    我有一个关于在视图之间共享数据的问题 希望它不是太基础 我在 appDelegate 中有一个 NSMutableArray 其中包含 Object1 Object2 Object3 创建新对象 并将其添加到数组中 时 我需要在下一个视图上
  • 从 ruby​​ 内部加密数据包,无需依赖 Knife

    目前要加密数据包 我必须这样做 system knife data bag from file TemporaryEncrypting enc file path secret file Secret Key Path 这不起作用 因为 K