I have a need in our QA Environment to wipe some of the keys from Riak but not all of them before deploying a new build.
I started with using the ruby riak client, and had the following working
require 'riak'
#https://github.com/basho/riak-ruby-client/blob/master/README.markdown
#https://docs.basho.com/riak/latest/dev/taste-of-riak/ruby/
client=Riak::Client.new(:protocol => "pbc")
client = Riak::Client.new(:nodes => [
{:host => '10.10.10.1', :pb_port => 8098}
])
client.buckets.each do |bucket|
if bucket.name.start_with?('test')
puts(bucket.name)
bucket.keys.each do |key|
bucket.delete(key)
end
end
end
Which gave a little error, but worked till I tired to run it on a windows machines, seem riak uses the ruby expect class which isn’t available on windows.
So then I took a different approach
require 'rest-client'
require 'json'
require 'uri'
host = "https://10.10.10.1:8098"
buckets_url = host + '/riak?buckets=true'
e_buckets_url = URI.escape(buckets_url)
json_object = JSON.parse(RestClient.get(e_buckets_url))
p json_object
json_object["buckets"].each do |bucket|
if bucket.start_with?('test')
p bucket
keys_url = 'https://10.10.10.1:8098' + '/riak/' + bucket + '?keys=true'
e_keys_url = URI.escape(keys_url)
p e_keys_url
json_object2 = JSON.parse(RestClient.get(e_keys_url))
p json_object2["keys"]
json_object2["keys"].each do |key|
delete_url = 'https://10.10.10.1:8098/riak' + '/' + bucket + '/' + key
e_delete_url = URI.escape(delete_url)
p e_delete_url
response2 = RestClient.delete(e_delete_url)
end
end
Then I wrapped it in ruby block for chef
ruby_block "wipe riak" do
block do
host = "https://#{node['test']['avenger']['riakhostAddress']}:8098"
buckets_url = host + '/riak?buckets=true'
e_buckets_url = URI.escape(buckets_url)
json_object = JSON.parse(RestClient.get(e_buckets_url))
p json_object
json_object["buckets"].each do |bucket|
if bucket.start_with?('test')
p bucket
keys_url = host + '/riak/' + bucket + '?keys=true'
e_keys_url = URI.escape(keys_url)
p e_keys_url
json_object2 = JSON.parse(RestClient.get(e_keys_url))
p json_object2["keys"]
json_object2["keys"].each do |key|
delete_url = host + '/riak/' + bucket + '/' + key
e_delete_url = URI.escape(delete_url)
p e_delete_url
response2 = RestClient.delete(e_delete_url)
end
end
end
end
end