From 3da2afa2023aacb05e3fafd4f62d29ea90e57bd1 Mon Sep 17 00:00:00 2001 From: Justin Steele Date: Tue, 20 Jan 2026 10:47:24 -0500 Subject: [PATCH 1/2] fix delete sparse key when removing a client Signed-off-by: Justin Steele --- lib/chef-vault/item_keys.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/chef-vault/item_keys.rb b/lib/chef-vault/item_keys.rb index c54a273d..1dac024f 100644 --- a/lib/chef-vault/item_keys.rb +++ b/lib/chef-vault/item_keys.rb @@ -91,6 +91,10 @@ def delete(chef_key) @cache[chef_key.name] = false raw_data[chef_key.type].delete(chef_key.name) raw_data.delete(chef_key.name) + if raw_data["mode"] == "sparse" + skey = Chef::DataBagItem.load(data_bag, sparse_id(chef_key.name)) + skey.destroy(data_bag, sparse_id(chef_key.name)) + end end def mode(mode = nil) From 1bbd7bbbd3c893766fdf04851049821275100069 Mon Sep 17 00:00:00 2001 From: Justin Steele Date: Tue, 20 Jan 2026 12:19:34 -0500 Subject: [PATCH 2/2] extend spec to cover sparse key delete Signed-off-by: Justin Steele --- lib/chef-vault/item_keys.rb | 8 +++++--- spec/chef-vault/item_keys_spec.rb | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/chef-vault/item_keys.rb b/lib/chef-vault/item_keys.rb index 1dac024f..3a2b77b9 100644 --- a/lib/chef-vault/item_keys.rb +++ b/lib/chef-vault/item_keys.rb @@ -91,9 +91,11 @@ def delete(chef_key) @cache[chef_key.name] = false raw_data[chef_key.type].delete(chef_key.name) raw_data.delete(chef_key.name) - if raw_data["mode"] == "sparse" - skey = Chef::DataBagItem.load(data_bag, sparse_id(chef_key.name)) - skey.destroy(data_bag, sparse_id(chef_key.name)) + unless Chef::Config[:solo_legacy_mode] + if raw_data["mode"] == "sparse" + skey = Chef::DataBagItem.load(data_bag, sparse_id(chef_key.name)) + skey.destroy(data_bag, sparse_id(chef_key.name)) + end end end diff --git a/spec/chef-vault/item_keys_spec.rb b/spec/chef-vault/item_keys_spec.rb index 58361959..3a44f0e1 100644 --- a/spec/chef-vault/item_keys_spec.rb +++ b/spec/chef-vault/item_keys_spec.rb @@ -130,6 +130,7 @@ expect(Chef::DataBagItem.load("foo", "bar_key_client_name").to_hash).to include("id" => "bar_key_client_name") expect(keys[client_name]).not_to be_empty keys.delete(chef_key) + expect { Chef::DataBagItem.load("foo", "bar_key_client_name").to_hash["client_name"] }.to raise_error(Net::HTTPClientException) keys.save("bar") expect(keys[client_name]).to be_nil keys.mode("default") @@ -145,6 +146,7 @@ expect(Chef::DataBagItem.load("foo", "bar_key_client_name").to_hash).to include("id" => "bar_key_client_name") expect(Chef::DataBagItem.load("foo", "bar_key_client_name").to_hash["client_name"]).not_to be_empty keys.delete(chef_key) + expect { Chef::DataBagItem.load("foo", "bar_key_client_name").to_hash["client_name"] }.to raise_error(Net::HTTPClientException) keys.save("bar") expect(keys[client_name]).to be_nil keys.mode("default")