solr_cloud-connection 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +46 -15
- data/Rakefile +1 -1
- data/lib/solr_cloud/alias.rb +7 -7
- data/lib/solr_cloud/collection.rb +13 -13
- data/lib/solr_cloud/configset.rb +0 -1
- data/lib/solr_cloud/connection/alias_admin.rb +1 -4
- data/lib/solr_cloud/connection/collection_admin.rb +5 -6
- data/lib/solr_cloud/connection/configset_admin.rb +0 -1
- data/lib/solr_cloud/connection/version.rb +1 -1
- data/lib/solr_cloud/connection.rb +14 -13
- data/readme.rb +4 -10
- metadata +51 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da67e9a6312ae058259368a9933abe711d1c0554337c59c5f688cf2f17cee606
|
4
|
+
data.tar.gz: 36b815217b2f3e806d9b639d4839f093d61327ee496fee1c3d4774039c688e48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c828e6c7f7976cee46ac7b81c8955d2253253e3084e3841e26a502bf2d03808327578e69e63a47c0907dd7d38df3db27747a2383a6e8a6f9f4b1a73c69832340
|
7
|
+
data.tar.gz: 25548a6825b308a62ec376bf1b59d596a557c8508f9feeb56cabd5bc402907ecf4f7602658c5087483424844d1fffddf2c7673ecc2f16cefb3ad79f03696aba5
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [0.5.0] - 2025-03-24
|
4
|
+
- Added some sugar for unifying aliases and collections
|
5
|
+
- Update tests
|
6
|
+
- Better errors
|
7
|
+
- Flesh out README.md to be a useful document
|
8
|
+
|
9
|
+
|
3
10
|
## [0.4.0] - 2023-12-07
|
4
11
|
- Fixed rules about what names are legal collections/configsets/aliases
|
5
12
|
- Update version and changelog
|
data/README.md
CHANGED
@@ -1,14 +1,36 @@
|
|
1
1
|
# SolrCloud::Connection
|
2
2
|
|
3
|
-
|
3
|
+
## Common usage
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
```ruby
|
6
|
+
|
7
|
+
# Connect to the server, upload a config set, make a collection based on it,
|
8
|
+
# and make an alias pointing to that collection
|
9
|
+
|
10
|
+
server = SolrCloud::Connection.new(url: url, user: user, password: pass)
|
11
|
+
cfg = server.create_configset(name: "my_cfg", confdir: "/path/to/my/conf")
|
12
|
+
cars_v1 = server.create_collection(name: "cars_v1", configset: "my_cfg")
|
13
|
+
cars = cars_v1.alias_as("cars")
|
14
|
+
|
15
|
+
```
|
16
|
+
|
17
|
+
## Basic functionality / Roadmap
|
18
|
+
|
19
|
+
Do basic administrative tasks on a running Solr cloud instance
|
20
|
+
|
21
|
+
* [x] create (i.e., upload) a configSet when given a `conf` directory
|
22
|
+
* [x] list, create, and delete configsets, collections, and aliases
|
23
|
+
* [x] get basic version information for the running solr
|
24
|
+
* [x] check on the health of individual collections
|
25
|
+
* [x] treat an alias (mostly) as a collection
|
26
|
+
* [ ] automatically generate methods to talk to defined requestHandlers and updateHandlers
|
27
|
+
* [ ] provide a way to talk to the analyzer for testing of fieldTypes
|
28
|
+
* [ ] hook into the schema API
|
29
|
+
* [ ] allow it to work with cores, and not just solrcloud collections (which, you know bad naming then)
|
30
|
+
* [ ] figure out how to deal with managed resources
|
31
|
+
* [ ] get info from updateHandler metrics, esp. pending documents and cumulative errors
|
32
|
+
* [ ] hook into performance metrics for easy reporting and checks
|
33
|
+
* [ ] support more of the v2 API
|
12
34
|
|
13
35
|
In almost all cases, you can treat an alias to a collection like the underlying collection.
|
14
36
|
|
@@ -43,6 +65,8 @@ user = "solr"
|
|
43
65
|
password = "SolrRocks"
|
44
66
|
config_directory = "/path/to/myconfig/conf" # Directory 'conf' contains solrconfig.xml
|
45
67
|
|
68
|
+
require "solr_cloud/connection"
|
69
|
+
|
46
70
|
server = SolrCloud::Connection.new(url: url, user: user, password: pass)
|
47
71
|
#=> <SolrCloud::Connection http://localhost:9090>
|
48
72
|
|
@@ -66,19 +90,25 @@ server.configset_names #=> ["_default"]
|
|
66
90
|
|
67
91
|
# Create a new configset by taking a conf directory, zipping it up,
|
68
92
|
# and sending it to solr
|
69
|
-
cset = server.create_configset(name: "horseless", confdir: config_directory)
|
93
|
+
cset = server.create_configset(name: "horseless", confdir: config_directory)
|
94
|
+
#=> <SolrCloud::Configset 'horseless' at http://localhost:9090>
|
70
95
|
server.configset_names #=> ["_default", "horseless"]
|
71
96
|
|
72
97
|
# That's a dumb name for a config set. Delete it and try again.
|
73
98
|
cset.delete! #=> <SolrCloud::Connection http://localhost:9090>
|
74
|
-
cset = server.create_configset(name: "cars_cfg", confdir: config_directory)
|
75
|
-
|
99
|
+
cset = server.create_configset(name: "cars_cfg", confdir: config_directory)
|
100
|
+
#=> <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>
|
101
|
+
server.configsets
|
102
|
+
#=> [<SolrCloud::Configset '_default' at http://localhost:9090>,
|
103
|
+
# <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>]
|
76
104
|
|
77
105
|
# Can't be overwritten by accident
|
78
|
-
server.create_configset(name: "cars_cfg", confdir: config_directory)
|
106
|
+
server.create_configset(name: "cars_cfg", confdir: config_directory)
|
107
|
+
#=> raised #<SolrCloud::WontOverwriteError: Won't replace configset cars_cfg unless 'force: true' passed >
|
79
108
|
|
80
109
|
# But you can force it
|
81
|
-
server.create_configset(name: "cars_cfg", confdir: config_directory, force: true)
|
110
|
+
server.create_configset(name: "cars_cfg", confdir: config_directory, force: true)
|
111
|
+
#=> <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>
|
82
112
|
|
83
113
|
cfg = server.get_configset("cars_cfg") #=> <SolrCloud::Configset 'cars_cfg' at http://localhost:9090>
|
84
114
|
cfg.in_use? #=> false
|
@@ -127,7 +157,8 @@ cars_v1.aliased? #=> true
|
|
127
157
|
|
128
158
|
cars_v1.has_alias?("cars") #=> true
|
129
159
|
cars_v1.alias_as("autos") #=> <SolrCloud::Alias 'autos' (alias of 'cars_v1')>
|
130
|
-
cars_v1.aliases
|
160
|
+
cars_v1.aliases
|
161
|
+
#=> [<SolrCloud::Alias 'cars' (alias of 'cars_v1')>, <SolrCloud::Alias 'autos' (alias of 'cars_v1')>]
|
131
162
|
|
132
163
|
cars_v1.get_alias("autos").delete! #=> <SolrCloud::Connection http://localhost:9090>
|
133
164
|
cars_v1.aliases #=> [<SolrCloud::Alias 'cars' (alias of 'cars_v1')>]
|
@@ -226,5 +257,5 @@ This repository is set up to run tests under docker.
|
|
226
257
|
|
227
258
|
## Contributing
|
228
259
|
|
229
|
-
Bugs, functionality suggestions, API suggestions, feature requests, etc. all
|
260
|
+
Bugs, functionality suggestions, API suggestions, feature requests, etc. all welcome
|
230
261
|
on GitHub at https://github.com/mlibrary/solr_cloud-connection.
|
data/Rakefile
CHANGED
data/lib/solr_cloud/alias.rb
CHANGED
@@ -41,13 +41,13 @@ module SolrCloud
|
|
41
41
|
# @return [Collection] the now-current collection
|
42
42
|
def switch_collection_to(coll)
|
43
43
|
collect_name = case coll
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
when String
|
45
|
+
coll
|
46
|
+
when Collection
|
47
|
+
coll.name
|
48
|
+
else
|
49
|
+
raise "Alias#switch_collection_to only takes a name(string) or a collection, not '#{coll}'"
|
50
|
+
end
|
51
51
|
raise NoSuchCollectionError unless connection.has_collection?(collect_name)
|
52
52
|
connection.create_alias(name: name, collection_name: collect_name, force: true)
|
53
53
|
end
|
@@ -55,10 +55,10 @@ module SolrCloud
|
|
55
55
|
|
56
56
|
def ==(other)
|
57
57
|
case other
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
when SolrCloud::Collection
|
59
|
+
collection.name == other.collection.name
|
60
|
+
else
|
61
|
+
false
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -68,7 +68,7 @@ module SolrCloud
|
|
68
68
|
def delete!
|
69
69
|
return connection unless exist?
|
70
70
|
raise CollectionAliasedError.new("Cannot delete collection #{name}; it has alias(s) #{alias_names.join(", ")}") if aliased?
|
71
|
-
connection.get("solr/admin/collections", {
|
71
|
+
connection.get("solr/admin/collections", {action: "DELETE", name: name})
|
72
72
|
connection
|
73
73
|
end
|
74
74
|
|
@@ -181,10 +181,10 @@ module SolrCloud
|
|
181
181
|
|
182
182
|
def add(docs)
|
183
183
|
docarray = if docs === Array
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
184
|
+
docs
|
185
|
+
else
|
186
|
+
[docs]
|
187
|
+
end
|
188
188
|
post("solr/#{name}/update/") do |r|
|
189
189
|
r.body = docarray
|
190
190
|
end
|
@@ -200,10 +200,10 @@ module SolrCloud
|
|
200
200
|
def inspect
|
201
201
|
anames = alias_names
|
202
202
|
astring = if anames.empty?
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
203
|
+
""
|
204
|
+
else
|
205
|
+
" (aliased by #{anames.map { |x| "'#{x}'" }.join(", ")})"
|
206
|
+
end
|
207
207
|
"<#{self.class} '#{name}'#{astring}>"
|
208
208
|
end
|
209
209
|
|
data/lib/solr_cloud/configset.rb
CHANGED
@@ -5,7 +5,6 @@ module SolrCloud
|
|
5
5
|
# methods having to do with aliases, to be included by the connection object.
|
6
6
|
# These are split out only to make it easier to deal with them.
|
7
7
|
module AliasAdmin
|
8
|
-
|
9
8
|
# A simple data-class to pair an alias with its collection
|
10
9
|
AliasCollectionPair = Struct.new(:alias, :collection)
|
11
10
|
|
@@ -24,7 +23,7 @@ module SolrCloud
|
|
24
23
|
end
|
25
24
|
raise NoSuchCollectionError.new("Can't find collection #{collection_name}") unless has_collection?(collection_name)
|
26
25
|
if has_alias?(name) && !force
|
27
|
-
raise WontOverwriteError.new("Alias '#{name}' already points to collection '#{
|
26
|
+
raise WontOverwriteError.new("Alias '#{name}' already points to collection '#{get_alias(name).collection.name}'; won't overwrite without force: true")
|
28
27
|
end
|
29
28
|
connection.get("solr/admin/collections", action: "CREATEALIAS", name: name, collections: collection_name)
|
30
29
|
get_alias(name)
|
@@ -83,5 +82,3 @@ module SolrCloud
|
|
83
82
|
end
|
84
83
|
end
|
85
84
|
end
|
86
|
-
|
87
|
-
|
@@ -20,17 +20,16 @@ module SolrCloud
|
|
20
20
|
# @raise [WontOverwriteError] if the collection already exists
|
21
21
|
# @return [Collection] the collection created
|
22
22
|
def create_collection(name:, configset:, shards: 1, replication_factor: 1)
|
23
|
-
|
24
23
|
unless legal_solr_name?(name)
|
25
24
|
raise IllegalNameError.new("'#{name}' is not a valid solr name. Use only ASCII letters/numbers, dash, and underscore")
|
26
25
|
end
|
27
26
|
|
28
27
|
configset_name = case configset
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
when Configset
|
29
|
+
configset.name
|
30
|
+
else
|
31
|
+
configset.to_s
|
32
|
+
end
|
34
33
|
raise WontOverwriteError.new("Collection #{name} already exists") if has_collection?(name)
|
35
34
|
raise NoSuchConfigSetError.new("Configset '#{configset_name}' doesn't exist") unless has_configset?(configset_name)
|
36
35
|
|
@@ -7,7 +7,6 @@ module SolrCloud
|
|
7
7
|
# methods having to do with configsets, to be included by the connection object.
|
8
8
|
# These are split out only to make it easier to deal with them.
|
9
9
|
module ConfigsetAdmin
|
10
|
-
|
11
10
|
# Given the path to a solr configuration "conf" directory (i.e., the one with
|
12
11
|
# solrconfig.xml in it), zip it up and send it to solr as a new configset.
|
13
12
|
# @param name [String] Name to give the new configset
|
@@ -31,12 +31,20 @@ module SolrCloud
|
|
31
31
|
# @return [String] String representation of the URL to solr
|
32
32
|
attr_reader :url
|
33
33
|
|
34
|
+
# @return [String] solr user
|
35
|
+
attr_reader :user
|
36
|
+
alias_method :username, :user
|
37
|
+
|
38
|
+
# @return [String] Solr password
|
39
|
+
attr_reader :password
|
40
|
+
|
34
41
|
# @return [#info] The logger
|
35
42
|
attr_reader :logger
|
36
43
|
|
37
44
|
# @return [Faraday::Connection] the underlying Faraday connection
|
38
45
|
attr_reader :connection
|
39
46
|
|
47
|
+
|
40
48
|
# let the underlying connection handle HTTP verbs
|
41
49
|
|
42
50
|
# @!method get
|
@@ -72,12 +80,12 @@ module SolrCloud
|
|
72
80
|
@user = user
|
73
81
|
@password = password
|
74
82
|
@logger = case logger
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
83
|
+
when :off, :none
|
84
|
+
Logger.new(File::NULL, level: Logger::FATAL)
|
85
|
+
when nil
|
86
|
+
Logger.new($stderr, level: Logger::WARN)
|
87
|
+
else
|
88
|
+
logger
|
81
89
|
end
|
82
90
|
@connection = create_raw_connection(url: url, adapter: adapter, user: user, password: password, logger: @logger)
|
83
91
|
bail_if_incompatible!
|
@@ -112,10 +120,6 @@ module SolrCloud
|
|
112
120
|
end
|
113
121
|
end
|
114
122
|
|
115
|
-
# Allow accessing the raw_connection via "connection". Yes, connection.connection
|
116
|
-
# can be confusing, but it makes the *_admin stuff easier to read.
|
117
|
-
alias_method :connection, :connection
|
118
|
-
|
119
123
|
# Check to see if we can actually talk to the solr in question
|
120
124
|
# raise [UnsupportedSolr] if the solr version isn't at least 8
|
121
125
|
# raise [ConnectionFailed] if we can't connect for some reason
|
@@ -192,6 +196,3 @@ module SolrCloud
|
|
192
196
|
end
|
193
197
|
end
|
194
198
|
end
|
195
|
-
|
196
|
-
|
197
|
-
|
data/readme.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "pathname"
|
3
4
|
$LOAD_PATH.unshift Pathname.new(__dir__) + "lib"
|
4
5
|
require_relative "lib/solr_cloud/connection"
|
@@ -7,13 +8,11 @@ url = "http://localhost:9090"
|
|
7
8
|
user = "solr"
|
8
9
|
pass = "SolrRocks"
|
9
10
|
|
10
|
-
|
11
11
|
server = SolrCloud::Connection.new(url: url, user: user, password: pass) #=>
|
12
12
|
|
13
|
-
|
14
|
-
server.
|
15
|
-
server.
|
16
|
-
server.configsets.reject {|c| c.name == "_default"}.each {|c| c.delete!}
|
13
|
+
server.aliases.each { |a| a.delete! }
|
14
|
+
server.collections.each { |c| c.delete! }
|
15
|
+
server.configsets.reject { |c| c.name == "_default" }.each { |c| c.delete! }
|
17
16
|
|
18
17
|
# or bring your own Faraday object
|
19
18
|
# server2 = SolrCloud::Connection.new_with_faraday(faraday_connection)
|
@@ -83,8 +82,6 @@ begin
|
|
83
82
|
rescue
|
84
83
|
end
|
85
84
|
|
86
|
-
|
87
|
-
|
88
85
|
##### Aliases
|
89
86
|
|
90
87
|
# We'll want to alias it so we can just use 'cars'
|
@@ -125,9 +122,6 @@ cars.switch_collection_to("cars_v1")
|
|
125
122
|
server.collection_names
|
126
123
|
|
127
124
|
# They even == to each other
|
128
|
-
cars
|
129
|
-
cars == cars_v1
|
130
|
-
cars == cars_v2
|
131
125
|
|
132
126
|
# But sometimes you want to differentiate them from each other
|
133
127
|
server.only_collection_names
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solr_cloud-connection
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bill Dueber
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -53,75 +53,107 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '13.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '13.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '3.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '3.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: standard
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 1.35.0
|
90
|
+
- - "~>"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '1.0'
|
90
93
|
type: :development
|
91
94
|
prerelease: false
|
92
95
|
version_requirements: !ruby/object:Gem::Requirement
|
93
96
|
requirements:
|
94
97
|
- - ">="
|
95
98
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
99
|
+
version: 1.35.0
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.0'
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
104
|
name: simplecov
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
100
106
|
requirements:
|
101
107
|
- - ">="
|
102
108
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
109
|
+
version: 0.22.0
|
110
|
+
- - "~>"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0.0'
|
104
113
|
type: :development
|
105
114
|
prerelease: false
|
106
115
|
version_requirements: !ruby/object:Gem::Requirement
|
107
116
|
requirements:
|
108
117
|
- - ">="
|
109
118
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
119
|
+
version: 0.22.0
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0.0'
|
111
123
|
- !ruby/object:Gem::Dependency
|
112
124
|
name: yard
|
113
125
|
requirement: !ruby/object:Gem::Requirement
|
114
126
|
requirements:
|
115
127
|
- - ">="
|
116
128
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
129
|
+
version: 0.9.0
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 0.9.0
|
118
133
|
type: :development
|
119
134
|
prerelease: false
|
120
135
|
version_requirements: !ruby/object:Gem::Requirement
|
121
136
|
requirements:
|
122
137
|
- - ">="
|
123
138
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
139
|
+
version: 0.9.0
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.9.0
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: dotenv
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '3.0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - "~>"
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '3.0'
|
125
157
|
description:
|
126
158
|
email:
|
127
159
|
- bill@dueber.com
|
@@ -170,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
202
|
- !ruby/object:Gem::Version
|
171
203
|
version: '0'
|
172
204
|
requirements: []
|
173
|
-
rubygems_version: 3.
|
205
|
+
rubygems_version: 3.5.11
|
174
206
|
signing_key:
|
175
207
|
specification_version: 4
|
176
208
|
summary: Do basic administrative operations on a solr cloud instance and collections
|